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

时间:2017-10-04 13:03:02

标签: excel vba excel-vba

我有一个字符串(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, "$"))

如何实现这个更简单的任何帮助?

TIA!

2 个答案:

答案 0 :(得分:3)

这非常快速且非常直接!

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

答案 1 :(得分:1)

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

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