先日ネットショップの商品データを管理しているExcelファイルで、数百行のデータに対しVBAの正規表現で一括変更を行ったのだが、その時につまづいたので備忘録としてまとめておく。
今回つまづいたのは、複数行のテキストを一つのセルに入力している「商品説明」欄の一括更新だ。
VBAで正規表現を使って一括更新をかけようとしたのだが「改行を含む複数行の文字列」のマッチングのやり方が分からなかった。
失敗例
まず最初に試したのがこちら。
Sub regMatching()
Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")
With reg
' 「製品仕様」以降の文字列を改行含めすべて取得
.Pattern = "製品仕様.*"
.Global = True
End With
Dim matches As Variant
Set matches = reg.Execute(Cells(1, 1))
Dim match As Variant
For Each match In matches
MsgBox match.Value
Next match
End Sub
このパターン指定(製品仕様.*)が真っ先に思いついたのだが、改行された後の文字列を取得できなかった。
ドットではなく「\s\S」を使用する
調べてみると、ドットでは改行にマッチさせることができないので、エスケープシーケンス「\s\S」を使うと良いそうだ。
Sub regMatching()
Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")
With reg
' 「製品仕様」以降の文字列を改行含めすべて取得
.Pattern = "製品仕様[\s\S]*"
.Global = True
End With
Dim matches As Variant
Set matches = reg.Execute(Cells(1, 1))
Dim match As Variant
For Each match In matches
MsgBox match.Value
Next match
End Sub
上記のコードを実行したところ、パターンで指定した「製品仕様」以降の文字列を、改行含めすべて取得することができた。