【入門編】VBAで「正規表現」を使う:複雑な文字列パターンマッチングを一行で解決する – Excel VBA解析バイブル

スポンサーリンク

Excel VBAで「正規表現」を操る:文字列操作の最終兵器を使いこなせ

こんにちは。現場で泥臭い自動化と向き合い続け、VBAの深淵を覗いてきたチーフアーキテクトです。

マクロの記録から一歩踏み出し、`Left`関数や`Mid`関数を駆使して文字列を切り出しているあなたへ。今日は、VBA開発の景色を一変させる「正規表現(Regular Expressions)」という最終兵器を授けます。

これを使えば、今まで数十行かけていた複雑な文字列処理が、わずか一行の魔法で完結します。VBAの「基礎」を卒業し、「技術」を武器にするための第一歩を踏み出しましょう。

—

なぜ今、正規表現なのか?

例えば、「メールアドレスの抽出」や「特定のフォーマットの注文番号の抜き出し」を想像してみてください。VBA標準の文字列関数だけでやろうとすると、IF文の迷路に迷い込み、コードはスパゲッティ状態になりますよね。

正規表現は、「文字列のパターン」を記述する言語です。
「数字が3つ続いて、その後にハイフン、次に英字が2つ……」といった複雑なルールを、たった一行の定義で表現できるのです。

—

ステップ1:VBScript.RegExp オブジェクトを呼び出す

VBAで正規表現を使うには、OS標準のライブラリである `VBScript.RegExp` を召喚する必要があります。以下のコードをご覧ください。

Sub RegexSample()
‘ 1. 正規表現オブジェクトを生成
Dim regEx As Object
Set regEx = CreateObject(“VBScript.RegExp”)

‘ 2. パターンの設定
‘ 例: 数字が3つ並ぶパターン (\d{3})
regEx.Pattern = “\d{3}”

‘ 3. 全検索(Global)と大文字小文字の無視(IgnoreCase)の設定
regEx.Global = True
regEx.IgnoreCase = True

‘ 4. マッチング実行
Dim inputStr As String
inputStr = “注文番号は123と456です”

If regEx.Test(inputStr) Then
MsgBox “数字の塊が見つかりました!”
End If
End Sub

ステップ2:抽出と置換(現場で一番使うテクニック)

単に「見つける」だけでは物足りないですよね。実務では「抽出」や「置換」が必須です。

抽出(Execute メソッド)

見つかった文字列を一つずつ取り出すには `Execute` メソッドを使います。

Sub ExtractNumbers()
Dim regEx As Object, matches As Object, m As Object
Set regEx = CreateObject(“VBScript.RegExp”)

regEx.Pattern = “\d+” ‘ 数字の連続を抽出
regEx.Global = True

Set matches = regEx.Execute(“2023年10月25日”)

‘ 見つかった数だけループ
For Each m In matches
Debug.Print m.Value ‘ イミディエイトウィンドウに出力
Next m
End Sub

置換(Replace メソッド)

これが最強です。例えば、電話番号からハイフンを消す、不要な空白を削除するなど、一瞬で終わります。

Sub CleanText()
Dim regEx As Object
Set regEx = CreateObject(“VBScript.RegExp”)

regEx.Pattern = “[ \t]+” ‘ スペースやタブを対象
regEx.Global = True

‘ 空白を「なし」に置換
Debug.Print regEx.Replace(“A B C”, “”) ‘ 結果: ABC
End Sub

—

初学者が陥りやすい「3つの罠」

現場で正規表現を使いこなすために、ここだけは注意してください。

1. 「Global」フラグを忘れる

  • デフォルトでは最初の1つしかマッチしません。全てを処理したい場合は必ず `regEx.Global = True` を設定してください。

2. 特殊文字のエスケープ

  • `?` や `.` や `(` などは正規表現の命令文です。もし「本当のクエスチョンマーク」を探したい場合は `\?` のようにバックスラッシュを前につける必要があります。

3. オブジェクトの解放

  • `Set regEx = Nothing` を最後に忘れず書きましょう。メモリのクリーンアップは、プロのエンジニアの嗜みです。

—

最後に:ここをクリアすれば「自動化」は自由になる

正規表現は、最初は暗号のように見えるかもしれません。しかし、一度書き方を覚えてしまえば、どんなに汚いデータが来ても、あなたはそれを一瞬で「綺麗なデータ」に整形できるようになります。

「マクロの記録」で生成された長いコードを眺めていた昨日とは、もうおさらばです。今日学んだ `RegExp` を使って、あなたの業務をよりスマートで、より創造的なものに変えていきましょう。

もし迷ったら、またここへ戻ってきてください。いつでもあなたのコードをレビューする準備はできていますよ。

それでは、良いコーディングライフを!

タイトルとURLをコピーしました