天天看點

VBA之正規表達式(18)-- 多項資料拆分

執行個體需求:資料儲存在A列和B列中,B列的題目選項錄入時采用了單行格式,列印測試題目之前需要調整為每個題目選項單獨一行的格式。

VBA之正規表達式(18)-- 多項資料拆分

使用VBA字元串函數去逐個字元判别的方式,對于B4的内容處理起來就比較麻煩,當然肯定是可以實作的。使用正則來實作就會更簡潔。

Sub RegExpDemo85()
    Dim strTxt As String
    Dim objRegEx As Object
    Dim c As Range
    Set objRegEx = CreateObject("vbscript.regexp")
    objRegEx.Pattern = "(?=[A-D]\.)(?!^)"
    objRegEx.Global = True
    Set DataRng = Range([B2], Cells(Rows.Count, 2).End(xlUp))
    For Each c In DataRng
        strTxt = c.Value
        c.Value = objRegEx.Replace(strTxt, vbLf)
    Next
    Set objMH = Nothing
    Set objMatch = Nothing
    Set objRegEx = Nothing
End Sub
           

【代碼解析】

第6行代碼指定正則模式。

正規表達式 說明
(?=[A-D].) 是一個零寬正向先行斷言,定位的位置之後為A至D單個字母加小數點
(?!^) 是一個零寬負向先行斷言,定位的位置之後不是字元表達式的開始位置

第11行代碼使用正則替換,由于正則模式指定的是“位置”,是以實際實作的效果是插入換行符。

執行代碼輕松實作格式整理,如果正規表達式缺少

(?!^)

,那麼第一個選項

A.

之前會增加一個額外的換行。