正則表達式或正則表達式,正是你在尋找我認爲。
以下模式
([A-Z0-9]*)!(\${0,1})([A-Z]{1,3})(\${0,1})([0-9]*)
會匹配 「工作表Sheet1!A1」 的東西, 「工作表Sheet1!$ A $ 1」, 「工作表Sheet1!$ A1」, 「工作表Sheet1!A $ 1」
說明:
([A-Z0-9]*)! = Find anything that is before "!"
(\${0,1}) = $ or nothing
([A-Z]{1,3}) = between one and three letters
([0-9]*) = Any number
您應該很容易就能夠修改該模式以僅匹配您想要的。特別是,([A-Z0-9] *)!(\ $ {0,1})B(\ $ {0,1})1,只會與B($)1匹配 使用字符串操作構造正則表達式模式,應該很好。
你需要引用(工具>參考)在「Microsoft VBScript的正則表達式5.5」
嘗試下面的代碼,這應該給你所有的工具來實現自己的目標
Sub ReplaceReference()
' Reference: Microsoft VBScript Regular Expressions 5.5
Dim RegEx As Object
Set RegEx = New RegExp
Dim s As String
' Here I have hardcoded the reference to the original cell for demonstration purposes
s = "Sheet1!$AB$2"
' Replacement: New sheetname, New Column, new row number
Dim NewCol As String, NewRow As String
NewCol = "C"
NewRow = "10"
Dim NewSheet As String
NewSheet = "Sheet2"
With RegEx
.Pattern = "([A-Z0-9]*)!(\${0,1})([A-Z]{1,3})(\${0,1})([1-9]*)"
.IgnoreCase = True
.Global = True
End With
Debug.Print RegEx.Replace(s, NewSheet & "!" & "$2" & NewCol & "$4" & NewRow)
End Sub
歡呼聲, Julien
好像只有四個需要替換的參考/地址的變體(相對/固定行/固定列/固定行+列),所以你可以循環遍歷所有這些,如果發現則更換(調整相應的替換地址) –
是的,我看不到任何其他方式,這是一個恥辱,因爲它似乎有點笨重。謝謝你的幫助! –
我認爲這些不是唯一的變體 - 它是否不包括命名範圍?還是他們算作單獨的參考? –