プログラマメモ2 - programmer no memo2

エクセルのマクロで正規表現の練習 - VBAでもRegExp 2010/06/18

エクセルをたくさん使うと何か負けた気がしてしまう今日この頃です。
エクセルなんでもできますね。ほんと。

VBAで正規表現を使うという発想がなかなか浮かばなかったのですが、使えるようになるとかなり便利です。

今回は、テキストボックスのフォームをおいて、ボタンをクリックしたら、入力されたテキストの各行の先頭の空白を削除するというシナリオです。

実は、はまったのはRegExpにMultiLineというプロパティがあるのに気がつかなかったことです。
MultiLineはデフォルトではFalseです。このプロパティがTrueでないと各行の処理をしてくれません。

以下コードです。


Function MyReplace(patrn, target, rep)
Set regEx = CreateObject("VBScript.RegExp")
regEx.MultiLine = True 'デフォルトはFalse
regEx.Pattern = patrn
regEx.Global = True
regEx.IgnoreCase = True
MyReplace = regEx.Replace(target, rep)
End Function

Private Sub CommandButton1_Click()
Dim s
s = TextBox1.Text
'各行の先頭の空白を消します
s = MyReplace("^[ ]+", s, "")
' Debug.Print s

' セルに一行づつ書き出してます。
Dim lines
Dim p
lines = Split(s, vbCrLf)
p = 0
For Each Line In lines
Debug.Print Line
Range("H5").Offset(p, 0).Value = Line
p = p + 1
Next

End Sub

: