如何在单元格范围的字符串末尾增加数字

时间:2019-06-13 20:29:16

标签: excel vba

我正在尝试编写代码以增加字符串末尾的数字。我想在H列中使用字符串“ FS_CAP_1_001”,并在各行中递增该字符串,以使其递增为“ FS_CAP_1_002”,“ FS_CAP_1_003”,“ FS_CAP_1_004”等。但是,我只想在字符串以“ FS_CAP_1_”开头。

我在下面编写了一些代码,但是在编译项目以对其进行调试时,我什至无法进入该函数。

我已经在该网站上阅读了“字符串末尾的增量数”问题,以及其他一些相关问题,我似乎无法正确地将代码组合在一起。我是VBA的初学者,距离我用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 :(得分:0)

正则表达式模式可以使用$作为代码来查找模式,该模式出现在字符串的末尾。

如果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中,您可以通过在A2中引用FS_CAP_1_001来使用它。

=myIncrement(A2)

答案 1 :(得分:0)

我能够使用以下代码正常工作:

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

谢谢大家的帮助!