VBAで自動化 VBA一覧 抽出・検索処理 正規表現

【VBA】文字列の置換を正規表現で行う方法|Replaceでは対応できない実務パターン完全解説

Excel VBAで文字列を扱う業務は非常に多く、

  • データの表記ゆれを統一したい
  • 不要な文字や記号だけを削除したい
  • 特定の条件に合う文字列だけを置換したい

といった場面は、ほぼ毎日のように発生します。

多くの場合、
Replace 関数を使えば解決できそうに見えますが、
実務では次のような壁に必ずぶつかります。

  • 「○○で始まる文字列だけ置換したい」
  • 「数字だけを抽出・置換したい」
  • 「桁数が不定のIDをまとめて変換したい」
  • 「条件が複雑すぎてReplaceでは無理」

このときに真価を発揮するのが、
正規表現(Regular Expression) を使った文字列置換です。

この記事では、
Excel VBAにおける 正規表現を使った文字列置換 について、

  • Replace関数との違い
  • 正規表現の基本構造
  • VBAでの具体的な書き方
  • 実務でよく使う置換パターン
  • 失敗しやすいポイントと対策

を、コード例中心・実務視点 で徹底解説します。

目次

✅ VBAで文字列置換に正規表現が必要になる理由

※Replace関数だけで済ませると、必ず限界が来ます。

・Replace関数の限界

VBA標準の Replace 関数は非常に便利ですが、
できることは次のように限られます。

  • 完全一致の文字列置換
  • 単純な文字列 → 文字列 の変換
result = Replace("ABC-123", "-", "")

これは問題ありません。

しかし、

  • 数字だけを削除
  • 特定の形式の文字列だけを置換
  • 条件付きで一部だけ変更

といった処理は、
Replaceでは対応できません。


・正規表現は「条件付き置換」ができる

正規表現を使うと、

  • 「数字だけ」
  • 「英字だけ」
  • 「〇文字以上」
  • 「特定の並び」

といった パターン指定 が可能になります。

これにより、
Replaceでは不可能だった置換が一気に可能になります。


✅ VBAで正規表現を使うための準備

※ここを知らないと、最初でつまずきます。

・VBAには正規表現専用のオブジェクトがある

Excel VBAでは、
RegExp オブジェクト を使って正規表現を扱います。

これはVBA標準の構文ではなく、
外部ライブラリ(VBScript正規表現) に含まれています。


・参照設定は必須?

実は、RegExpは

  • 参照設定を入れる方法
  • CreateObjectで生成する方法

の2通りがあります。

実務では、
参照設定不要の CreateObject を使う方法 が安全です。


・基本的な宣言方法

Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")

これで、
正規表現を使う準備は完了です。


✅ 正規表現による置換の基本構文

※まずは最小構成を理解します。

・最も基本的な置換例

Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")

reg.Pattern = "ABC"
reg.Global = True

result = reg.Replace("ABC-ABC-123", "XYZ")

実行結果:

XYZ-XYZ-123

・重要なプロパティ3つ

正規表現を使う際、最低限覚えるべきプロパティは次の3つです。

  • Pattern :検索パターン
  • Global :全体置換するかどうか
  • IgnoreCase :大文字小文字を区別するか
reg.Global = True
reg.IgnoreCase = True



✅ 正規表現の基本パターン(最低限ここだけ)

※すべて覚える必要はありません。

・よく使うメタ文字

パターン意味
.任意の1文字
\d数字
\D数字以外
\w英数字
\s空白
+1回以上
*0回以上
{n}n回
{n,}n回以上

・例:数字だけを置換する

reg.Pattern = "\d"
result = reg.Replace("A1B2C3", "")

結果:

ABC

 


✅ 数字だけを削除・置換する

※ID・コード整形で頻出です。

・数字をすべて削除

reg.Pattern = "\d+"
result = reg.Replace("商品123番号456", "")

結果:

商品番号

・数字を特定文字に置換

reg.Pattern = "\d+"
result = reg.Replace("ID12345", "【番号】")

✅ 英字・数字をまとめて置換する

※表記ゆれ対策でよく使います。

・英数字をすべて削除

reg.Pattern = "[A-Za-z0-9]+"
result = reg.Replace("ABC123_日本語", "")

結果:

_日本語

✅ 特定の形式の文字列だけ置換する

※Replaceでは不可能な代表例です。

・電話番号形式だけを置換

reg.Pattern = "\d{2,4}-\d{2,4}-\d{3,4}"
result = reg.Replace("TEL:03-1234-5678", "TEL:【非表示】")

✅ 行頭・行末を条件にした置換

※データ整形で非常に強力です。

・行頭の文字だけ削除

reg.Pattern = "^#"
result = reg.Replace("#コメント", "")

・行末の特定文字を削除

reg.Pattern = "円$"
result = reg.Replace("1000円", "")

✅ 連続する空白・記号をまとめて置換

※表記統一でよく使います。

・連続スペースを1つにする

reg.Pattern = "\s+"
result = reg.Replace("A   B    C", " ")

・連続記号を1つにまとめる

reg.Pattern = "-+"
result = reg.Replace("A---B--C", "-")

✅ 正規表現 × セル値の置換

※Excel実務では必須です。

・セルの値を正規表現で置換

Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")

reg.Pattern = "\d+"
reg.Global = True

Cells(1, 1).Value = reg.Replace(Cells(1, 1).Value, "")

・複数行をループで処理する

Dim i As Long
For i = 1 To 10
    Cells(i, 1).Value = reg.Replace(Cells(i, 1).Value, "")
Next i

✅ 正規表現置換でよくある失敗と対策

※ここを知らないとハマります。

・GlobalをTrueにしていない

reg.Global = False

この場合、
最初の1箇所しか置換されません。


・Patternを書き換え忘れる

同じ RegExp オブジェクトを使い回す場合、
Patternは毎回明示的に設定しましょう。

参考:【VBA】正規表現:Patternプロパティの使い方


・全角文字にマッチしない

VBScriptの正規表現は、

  • 全角数字
  • 全角英字

には基本的にマッチしません。

全角対応が必要な場合は、
事前に全角→半角変換を行う設計が必要です。


✅ Replace関数と正規表現の使い分け

※どちらも使える人が実務では強いです。

・Replaceが向いているケース


・正規表現が向いているケース


✅ 実務での設計ポイント

※使えるだけでなく「壊れない」ために。

・正規表現は関数化する

Function RegexReplace(text As String, pattern As String, rep As String) As String
    Dim reg As Object
    Set reg = CreateObject("VBScript.RegExp")
    reg.Pattern = pattern
    reg.Global = True
    RegexReplace = reg.Replace(text, rep)
End Function

これにより、
可読性と再利用性が大きく向上します。


✅ RPA(UiPath)連携時の注意点

※正規表現は自動化と相性が良いです。

  • 表記ゆれの吸収
  • 不要文字の除去
  • データ整形の自動化

VBA側で正規表現を使って整形しておくことで、
RPAの処理は大幅に安定します。


✅ よくある勘違い

※遠回りする原因です。

・正規表現は難しい

→ 実務で使うのはごく一部です。

・全部正規表現にすべき

→ Replaceで済むならReplaceの方が良いです。


✅ まとめ:VBAの文字列置換は正規表現で一気に楽になる

  • Replaceには限界がある
  • 正規表現は「条件付き置換」ができる
  • RegExpオブジェクトを使う
  • よく使うパターンは限られている
  • 実務ではReplaceとの使い分けが重要

正規表現を使えるようになると、
VBAの文字列処理は
「力技」から「設計」へ 変わります。

ぜひ、
日々のデータ整形・自動化業務に、
正規表現による文字列置換 を取り入れてみてください。

参考:【VBA】文字列の置換を一括で行う方法:Replace関数

    -VBAで自動化, VBA一覧, 抽出・検索処理, 正規表現