Увеличение последовательности vba

Моя последовательность будет что-то вроде 0000-16x, 0001-16x, 0002-16x, … ,9999-16x Я хочу написать макрос, который будет читать одно из значений и увеличивать его на единицу. например если он читает 0014-16x, код вернет 0015-16x

Мой код работает, только если содержимое ячейки - все числа

Dim name As Variant
name = ActiveCell
name = name + 1
ActiveCell.Offset(1, 0).Activate
ActiveCell.FormulaR1C1 = name

Как я могу увеличить последовательность, подобную той, что у меня есть? Спасибо

В этом случае назначение FormulaR1C1 кажется излишним; вы можете напрямую назначать Value ячейки. Тем не менее, с UDF, такой как Решение Тима, это становится неактуальным.

Mathieu Guindon 17.01.2019 23:47

Спасибо всем за ваше время и помощь. Я все еще новичок в функции vba, и все ответы дали мне что-то новое для изучения.

S.camp 18.01.2019 16:18
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
2
132
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Давайте разделим строку по разделителю «-», увеличим число на 1, добавим нули и преобразуем нашу строку — попробуйте:

Sub Increment()

    Dim name As Variant
    Dim firsthalf As String, secondhalf As String

    name = Split(ActiveCell, "-")(0)
    secondhalf = Split(ActiveCell, "-")(1)
    name = name + 1

    Select Case Len(name)
        Case 1
            firsthalf = "000" & name
        Case 2
            firsthalf = "00" & name
        Case 3
            firsthalf = "0" & name
        Case 4
            firsthalf = name
    End Select

    ActiveCell.Offset(1, 0).Activate
    ActiveCell.FormulaR1C1 = firsthalf & "-" & secondhalf

End Sub

К вашему сведению: регистр можно заменить на right("0000"&name,4)

Jules 17.01.2019 23:38

В настоящее время я не могу проверить это, так как пишу со своего телефона, но вы можете использовать функцию Split() с разделителем - и добавить 1 в позицию (0) массива, соединить его вместе и дополнить его 0 до его длины это 8.

Пример:

Dim name() As Variant
Dim jName as String
name = Split(ActiveCell,"-")
name(0) = name(0) + 1
jName = Join(name,"-")
Do Until Len(jName) = 8
    jName = "0" & jName
Loop
ActiveCell.Offset(1, 0).Activate
ActiveCell.FormulaR1C1 = jName
Ответ принят как подходящий

Без проверки ошибок:

Function NextSequence(v)
    Dim arr
    arr = Split(v, "-")
    NextSequence = Format(CLng(arr(0)) + 1, "0000") & "-" & arr(1)
End Function

Мне нравится, как это решение позволяет избежать работы с ActiveCell. Может использоваться как UDF!

Mathieu Guindon 17.01.2019 23:45

Красивое и простое решение!

dwirony 18.01.2019 18:36

Вот решение, отличное от VBA, FWIW...

=TEXT(LEFT(A1,FIND("-",A1)-1)+1,"0000")&"-"&MID(A1,FIND("-",A1)+1,99)

с 0000-16x в ячейке A1 и формулой в ячейке A2. Просто заполните, чтобы расширить.

Другие вопросы по теме