在VBA中替换字符串中的字符的最快方法

在VBA中替换字符串中的字符的最快方法,vba,excel,Vba,Excel,我有一个字符串(excel范围),类似于“$a$1:$AB$1200” 我需要将起始范围(这里是1)的行替换为其他值,比如6(所以字符串变成“$A$6:$AB$1200”) 我尝试了下面的代码,但似乎变得太复杂了 Dim stRng As String stRng = Split(usdRange, ":")(0) Dim row2bRepl As Long row2bRepl = Right(stRng, Len(stRng) - InStr(2, stRng, "$"))

我有一个字符串(excel范围),类似于“$a$1:$AB$1200”

我需要将起始范围(这里是1)的行替换为其他值,比如6(所以字符串变成“$A$6:$AB$1200”)

我尝试了下面的代码,但似乎变得太复杂了

 Dim stRng As String
  stRng = Split(usdRange, ":")(0)

   Dim row2bRepl As Long
   row2bRepl = Right(stRng, Len(stRng) - InStr(2, stRng, "$"))

   usdRange = Replace(stRng, row2bRepl, hdrRow, InStr(2, stRng, "$"))
关于如何实现这一点,有什么帮助吗


蒂亚

像这样的东西会有用的。这并不简单,但看起来很简单:

Public Sub ReplaceString()

    Dim strInput    As String
    Dim lngFrom     As Long
    Dim lngTo       As Long

    strInput = "$A$1:$AB$1200"

    lngFrom = InStr(2, strInput, "$")
    lngTo = InStr(1, strInput, ":")

    Debug.Print Left(strInput, lngFrom) & "77" & Right(strInput, Len(strInput) - lngFrom-1)

End Sub

它取字符串的左、右位置,并将中间值设为新值,在这种情况下<代码> 77 /代码> .< /P> < P>这样的事情会起作用。这并不简单,但看起来很简单:

Public Sub ReplaceString()

    Dim strInput    As String
    Dim lngFrom     As Long
    Dim lngTo       As Long

    strInput = "$A$1:$AB$1200"

    lngFrom = InStr(2, strInput, "$")
    lngTo = InStr(1, strInput, ":")

    Debug.Print Left(strInput, lngFrom) & "77" & Right(strInput, Len(strInput) - lngFrom-1)

End Sub

它取字符串的左、右位置,并将中间值设为新值,在这种情况下<代码> 77 /代码> .< /P> < P>这是非常快速和非常直接的!p>

Sub test()
    Dim s1 As String, s2 As String

    s1 = "$A$1:$AB$1200"
    s2 = Intersect(Range(s1), Range(s1).Offset(5, 0)).Address 'evaluates to $A$6:$AB$1200
End Sub
根据您的评论,这里您可以看到它在完全随机的范围内工作得非常好,仅在运行时确定

Sub test()
    Dim usdRange As String, usdRange2 As String
    Dim lastRow As Long, lastCol As Long
    lastRow = Application.WorksheetFunction.RandBetween(10, 100)
    lastCol = Application.WorksheetFunction.RandBetween(1, 100)

    usdRange = Range("A1", Cells(lastRow, lastCol)).Address
    usdRange2 = Intersect(Range(usdRange), Range(usdRange).Offset(5, 0)).Address

    Debug.Print usdRange, usdRange2
End Sub
输出以下值,将所有范围偏移指定的量:

Old string    New string
$A$1:$CF$22   $A$6:$CF$22
$A$1:$AA$93   $A$6:$AA$93
$A$1:$N$82    $A$6:$N$82

这是相当快和非常直接的

Sub test()
    Dim s1 As String, s2 As String

    s1 = "$A$1:$AB$1200"
    s2 = Intersect(Range(s1), Range(s1).Offset(5, 0)).Address 'evaluates to $A$6:$AB$1200
End Sub
根据您的评论,这里您可以看到它在完全随机的范围内工作得非常好,仅在运行时确定

Sub test()
    Dim usdRange As String, usdRange2 As String
    Dim lastRow As Long, lastCol As Long
    lastRow = Application.WorksheetFunction.RandBetween(10, 100)
    lastCol = Application.WorksheetFunction.RandBetween(1, 100)

    usdRange = Range("A1", Cells(lastRow, lastCol)).Address
    usdRange2 = Intersect(Range(usdRange), Range(usdRange).Offset(5, 0)).Address

    Debug.Print usdRange, usdRange2
End Sub
输出以下值,将所有范围偏移指定的量:

Old string    New string
$A$1:$CF$22   $A$6:$CF$22
$A$1:$AA$93   $A$6:$AA$93
$A$1:$N$82    $A$6:$N$82

最快的方式还是更方便的方式?最好更快!最快的方式还是更方便的方式?最好更快!抱歉,我忘了提到示例“$A$1:$AB$1200”中的范围是动态范围/仅在运行时已知。。我没有信息,因此无法应用偏移量。但是,解决方案很好:)@NetTechie,您可能需要更好地解释您的实际问题,因为据我所知,这对未知范围非常有效——请参见上面的编辑作为证据。对不起,我忘了提到示例“$a$1:$AB$1200”中的范围是一个动态范围/仅在运行时已知。。我没有信息,因此无法应用偏移量。不过,解决方案很好:)@NetTechie,你可能需要更好地解释你的实际问题,因为我可以告诉你,这在未知范围内非常有效——请参见上面的编辑作为证据Hanks@Vityata,这很有效:)但我想知道这是否仍然可以简化…谢谢@Vityata,这是可行的:)但我只是想知道这是否仍然可以简化。。。