2014年10月18日土曜日

[VBA] 正規表現で行コメントを削除する

VBAを使って、行コメントや空行、およびタブやスペースだけの実質的な空行も削除するサンプルです。参照設定として「Microsoft VBScript Regular Expressions 5.5」が必要です。

簡略にはまとめて置換する Replace 関数で済ませたいが、改行コード CrLfLf に変わってしまった。
Dim Reg As New RegExp
Reg.MultiLine = True
Reg.Global = True

'SQL 行コメントの場合の正規表現パターン
Reg.Pattern = "--.*$"
'タブやスペースの場合の正規表現パターン
Reg.Pattern = "( |\t)+$"

Result = Reg.Replace(Text, "")


代替案として、改行コードを変更(元に戻す)するステップを加えます。

' 改行コード CrLf と Lf が混在している状態から、Lf に統一する
Text = Replace(Expression:=Text, Find:=vbCr, Replace:="", Count:=-1, Compare:=VbCompareMethod.vbBinaryCompare)
' 改行コードを Lf から CrLf に変換する
Text = Replace(Expression:=Text, Find:=vbLf, Replace:=vbCrLf, Count:=-1, Compare:=VbCompareMethod.vbBinaryCompare)


どうやら、RegExp による改行についての置換は問題がありそう。

[VBA] RegExp.Replace で改行コードが変わってしまう
http://mofuken.blogspot.jp/2014/10/vba-regexpreplace.html

■ 参考資料

Microsoft Visual Basic 6.0 で正規表現を使用する方法
http://support.microsoft.com/kb/818802