執行個體需求:資料儲存在A列和B列中,B列的題目選項錄入時采用了單行格式,列印測試題目之前需要調整為每個題目選項單獨一行的格式。
使用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.
之前會增加一個額外的換行。