2017-10-04 138 views
2

我有一個字符串(一個excel範圍),例如「$ A $ 1:$ AB $ 1200」。在VBA中替換字符串中字符的最快方法

我需要更換起始範圍的行(在這裏,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!

+0

最快的方法還是更方便的方法? – Tehscript

+0

更快選擇! – NetTechie

回答

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 
+0

對不起,我忘了提及範例「$ A $ 1:$ AB $ 1200」是一個動態的/已知的只有在運行時..我沒有信息,所以我不能申請抵消。然而,解決方案很好:) – NetTechie

+0

@NetTechie,你可能需要更好地解釋你的*實際*問題,因爲從我可以告訴這個作品與未知範圍完美結合 - 請參閱上面的編輯作爲證據 – CallumDA

+0

是的,這個工程如預期的那樣..謝謝! – NetTechie

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

+0

謝謝@Vityata,這工作:)但只是想知道這是否仍然可以簡化... – NetTechie