VBAで自動化 VBA一覧 セル・値の取得と貼り付け 置き換え

【VBA】文字列をワイルドカードで置換する方法|曖昧一致を安全に処理する実務解説

Excel VBAで文字列を扱っていると、
「完全一致ではなく、ある程度あいまいに置換したい」
「数値や日付が混ざっていて、毎回同じ文字列にならない」
「〇〇で始まる文字列をまとめて消したい」
と感じる場面は非常に多くあります。

たとえば、次のようなケースです。

  • 「商品A_001」「商品A_002」「商品A_999」をすべて「商品A」に統一したい
  • 「2024/01/01」「2024/02/15」など、日付部分だけを削除したい
  • 「※注記1」「※注記2」「※注記A」をまとめて消したい

このような処理を
Replace("商品A_001","商品A")
のように 完全一致で書こうとすると、現実的ではありません

そこで活躍するのが、
ワイルドカード(あいまい指定)を使った文字列置換 です。

この記事では、VBA初心者の方でも理解できるように、

  • ワイルドカードとは何か
  • VBAでワイルドカード置換を行う方法
  • 実務でよく使うパターン別コード
  • よくある失敗と安全に使うコツ

を、実際に動くVBAコード付きで丁寧に解説します。

目次

✅ VBAで使う「ワイルドカード」とは何か

※誤解されやすいポイント

Excelの検索と置換と、VBAのReplaceは仕組みが違います。

・ワイルドカードの基本的な意味

ワイルドカードとは、
「どんな文字が来てもOK」というあいまい指定 のことです。

代表的な記号は次のとおりです。

  • * :任意の文字列(0文字以上)
  • ? :任意の1文字

これを使うことで、
完全に一致しない文字列もまとめて扱えるようになります。


・Excelの検索と置換との違い(重要)

ここが初心者が一番混乱しやすいポイントです。

  • Excelの検索と置換
    → ワイルドカードがそのまま使える
  • VBAのReplace関数
    → ワイルドカードは使えない

つまり、
Replace(文字列, "商品A_*", "商品A")
のような書き方は そのままでは動きません

VBAでワイルドカード置換を行うには、
別の方法を使う必要があります。


✅ VBAでワイルドカード置換を行う3つの方法

※ここを読まないと後で混乱します

VBAには複数の選択肢があります。

VBAであいまい置換を行う主な方法は、次の3つです。

  1. Like 演算子で判定してから Replace
  2. Range.Replace を使う(Excel機能を利用)
  3. 正規表現(RegExp)を使う

初心者の方は、
① → ② → ③ の順で覚えるのがおすすめです。


✅ 方法① Like演算子を使ったワイルドカード置換

※初心者に一番おすすめ

仕組みが分かりやすく、安全です。

・Like演算子とは

Like は、
文字列が特定のパターンに一致するかを判定する演算子 です。

If 文字列 Like "商品A_*" Then

のように使います。


・Likeを使った基本的な置換例

Sub Replace_With_Like()

    Dim textValue As String
    textValue = "商品A_001"

    If textValue Like "商品A_*" Then
        textValue = "商品A"
    End If

    MsgBox textValue

End Sub

・この方法の考え方

  • ワイルドカードで 判定 する
  • 置換自体はシンプルに行う

👉
「どれを置換するか」と
「どう置換するか」を分けて考えるのがポイントです。


✅ セル範囲を対象にLikeで一括置換する

※実務で一番よく使う形

列データの整理に最適です。

・A列の値が特定パターンなら置換

Sub ReplaceColumn_With_Like()

    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row

    Dim r As Long

    For r = 2 To lastRow
        If Cells(r, "A").Value Like "商品A_*" Then
            Cells(r, "A").Value = "商品A"
        End If
    Next r

End Sub

・この方法のメリット




✅ 方法② Range.Replaceでワイルドカード置換する

※Excelの検索置換をVBAから使う方法

ワイルドカードをそのまま使えます。

・Range.Replaceの基本

Range.Replace は、
Excelの「検索と置換」をVBAから実行するイメージです。

Range("A:A").Replace _
    What:="商品A_*", _
    Replacement:="商品A", _
    LookAt:=xlPart

・実務コード例(A列全体を対象)

Sub Replace_With_RangeReplace()

    Columns("A").Replace _
        What:="商品A_*", _
        Replacement:="商品A", _
        LookAt:=xlPart, _
        MatchCase:=False

End Sub

・この方法の注意点(重要)

  • Excelの設定に依存する
  • 元に戻せない可能性がある
  • 数式・書式にも影響する場合がある

👉
手軽だが、事故が起きやすい ため、
初心者の方は慎重に使いましょう。

参考:【VBA】ワイルドカードの使用方法


✅ 方法③ 正規表現(RegExp)を使ったワイルドカード置換

※中級者向け

表現力は最強ですが、難易度が上がります。

・正規表現とは

正規表現は、
文字列パターンを柔軟に指定できる仕組みです。

  • 数字だけ
  • 特定の記号
  • 桁数指定

などが可能になります。


・正規表現で置換する基本コード

Sub Replace_With_RegExp()

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

    reg.Pattern = "商品A_\d+"
    reg.Global = True

    Dim textValue As String
    textValue = "商品A_001"

    textValue = reg.Replace(textValue, "商品A")

    MsgBox textValue

End Sub

・正規表現のメリットと注意点

メリット

  • 非常に柔軟
  • 複雑な条件に対応可能

注意点

  • 初心者には読みにくい
  • 修正が難しくなりがち

👉
「Likeで足りないときの最終手段」と考えるのがおすすめです。

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


✅ ワイルドカード置換でよくある失敗

※ここを読まないと事故りやすい

  • Replace関数でワイルドカードが使えると思い込む
  • 対象範囲を広く取りすぎる
  • 数値列や日付列まで置換してしまう
  • テストせずに本番実行する

特に
Range.Replaceの使いすぎ は要注意です。


✅ 実務で安全に使うためのチェックポイント

※初心者でも必ず守ってほしい

  • 対象列を必ず限定する
  • 事前にコピーシートを作る
  • 最初はLikeで判定する
  • 想定外の文字列がないか確認

これだけで、
ワイルドカード置換の事故は大幅に減ります。


✅ 実務での使い分け指針(初心者向け)

※迷ったらこの順番

  1. Like演算子+If文
  2. Range.Replace(小規模・一時的)
  3. 正規表現(複雑な条件)

「いきなり正規表現」は、
初心者にはおすすめしません。


✅ ワイルドカード置換を関数化する例

※再利用したい場合

Function NormalizeProductName(textValue As String) As String
    If textValue Like "商品A_*" Then
        NormalizeProductName = "商品A"
    Else
        NormalizeProductName = textValue
    End If
End Function

処理を関数にすることで、

  • 可読性が上がる
  • 修正が楽
  • テストしやすい

というメリットがあります。

参考:【Excel】置換でワイルドカードを使いこなす方法|「*」「?」で柔軟な文字列操作を実現

参考:【VBA】Replaceメソッドで文字を一括置き換え!特定の文字列を変換する方法とサンプルコード


✅ まとめ:VBAでワイルドカード置換を使いこなすポイント

  • Replace関数単体ではワイルドカードは使えない
  • Like演算子が初心者には最適
  • Range.Replaceは手軽だが注意が必要
  • 正規表現は最終手段
  • 必ずテストしてから本番実行

VBAのワイルドカード置換を理解すると、
「完全一致では対応できない実務データ」を一気に整理できる ようになります。

まずはLike演算子から始めて、
必要に応じてステップアップしていきましょう。

    -VBAで自動化, VBA一覧, セル・値の取得と貼り付け, 置き換え