Как увеличить число в конце строки для диапазона ячеек - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь написать код для увеличения числа в конце строки. Я хотел бы взять строку «FS_CAP_1_001» в столбце H и увеличить строку вниз по строкам, чтобы она увеличивалась как «FS_CAP_1_002», «FS_CAP_1_003», «FS_CAP_1_004» и т. Д. Однако я хочу сделать это только в том случае, если строка начинается с "FS_CAP_1 _".

Я написал некоторый код ниже, но даже не могу войти в функцию, когда собираю проект для его отладки.

На этом сайте я прочитал вопрос «Номер приращения в конце строки», а также несколько других связанных вопросов, и я не могу правильно составить код. Я новичок в VBA, и прошел уже как минимум год с тех пор, как я написал для него код.

Function NumberIncrement_CapCode_Tier1_Lvl1(ByVal txt As String) As String

With Worksheets("PD Code Structure")

Dim i As Integer
Dim myVal As Integer
Dim cell As Range

For Each cell In Worksheets("PD Code Structure").Range(Cells(i, 8))
txt = cell.Value

myVal = Val(Split(txt, "_")(1)) + 1

NumberIncrement_CapCode_Tier1_Lvl1 = Split(txt, "_")(0) & "_" & Format(myVal, "000")

Next cell

End With

End Function

Мой ожидаемый результат - для каждой строки в столбце «H», где строка начинается с «FS_CAP_1_», последующие строки будут увеличиваться, чтобы показать «FS_CAP_1_002», «FS_CAP_1_003», «FS_CAP_1_004» и т. Д.

Я не могу даже войти в функцию, когда собираю проект для его отладки.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Мне удалось заставить его работать правильно с помощью следующего кода:

Sub NumberIncrement()

With Worksheets("PD Code Structure")
    Dim i As Integer
    Dim cell As Range
    i = 1

    For Each cell In .Range("H2: H1006")

      If InStr(cell.Value, "FS_CAP_1_") Then
        cell.Value = cell.Value & Format(i, "000")
        i = i + 1
      End If

    Next cell
    End With
End Sub

Спасибо всем за помощь!

0 голосов
/ 14 июня 2019

Шаблон регулярного выражения может использовать $ в качестве кода для поиска шаблона, когда он встречается в конце строки.

Если часть FS_CAP_1_ несколько динамична, вы можете использовать что-то, имеющее дело только с числами в конце строки.

Function myIncrement(str As String, _
                     Optional z As Integer = 3) As String
    Dim rgx As Object, inc1 As String

    Set rgx = CreateObject("vbscript.regexp")

    With rgx

        .Pattern = Format(z, "\[\0\-9\]{0}$")

        If .test(str) Then

            inc1 = .Execute(str)(0)

            myIncrement = Left(str, Len(str) - z) & Format(CLng(inc1) + 1, String(z, "0"))

        End If

    End With

End Function

В A3 вы можете использовать его, ссылаясь на FS_CAP_1_001 в A2.

=myIncrement(A2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...