VBA之正則表達式(19)-- 相對引用轉絕對引用

大家都知道Excel公式中使用的單元格引用有兩種形式:相對引用(如A1)和絕對引用(如$A$1)兩種形式,在輸入公式按可切換兩種引用形式。對於已有的公式,如果需要變更引用形式,逐個手工修改有些費勁,而且可能會導致人爲錯誤,使用正則表達式功能,可以完成公式的轉換。
工作表中B列已經設置公式,爲了便於查看將公式顯示於C列表,可以看出公式中既有相對引用,也有絕對引用,如下圖所示。
在這裏插入圖片描述

示例代碼如下。

Sub ChangeFormulaRef()
    Dim objRegEx As Object
    Dim objCell As Range
    Dim strFormula As String
    Set objRegEx = CreateObject("vbscript.Regexp")
    objRegEx.Pattern = "([A-Z]{1,3})(\d{1,7})"
    objRegEx.Global = True
    For Each objCell In ActiveSheet.UsedRange.Columns(2).Cells
        If objCell.HasFormula = True Then
            strFormula = objCell.Formula
            strFormula = objRegEx.Replace(strFormula, "$$$1$$$2")
            objCell.Formula = strFormula
        End If
    Next
    Set objRegEx = Nothing
    Set objCell = Nothing
End Sub

運行示例代碼,結果如下圖所示,公式中的相對引用轉換爲絕對引用。
在這裏插入圖片描述
【代碼解析】
第5行代碼創建正則表達式對象。
第6行代碼設置匹配模式。

匹配模式 含義
[A-Z]{1,3} 1個至3個大小字母,匹配列標A到XFD,這裏不是嚴格的匹配,例如ZZZ也可以被匹配,但是這並不是合法的單元格列標
\d{1,6} 1位至6位數字,匹配行號,同上也不是嚴格的匹配

第8~14行循環遍歷處理第2列的單元格。
第9行代碼判斷單元格是否包含公式。
第10行代碼提取單元格公式。
第11行使用正則替換變換公式字符串。

匹配模式 含義
$$ 是轉義的$
$1 代表第一個捕獲組的字符內容,即單元格引用中的列標
$2 代表第二個捕獲組的字符內容,即單元格引用中的行號

第14行代碼更新公式。
第15和16行代碼釋放對象變量的系統資源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章