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でワイルドカード置換を行う3つの方法
- ※ここを読まないと後で混乱します
- ✅ 方法① Like演算子を使ったワイルドカード置換
- ※初心者に一番おすすめ
- ・Like演算子とは
- ・Likeを使った基本的な置換例
- ・この方法の考え方
- ✅ セル範囲を対象にLikeで一括置換する
- ※実務で一番よく使う形
- ・A列の値が特定パターンなら置換
- ・この方法のメリット
- ✅ 方法② Range.Replaceでワイルドカード置換する
- ※Excelの検索置換をVBAから使う方法
- ・Range.Replaceの基本
- ・実務コード例(A列全体を対象)
- ・この方法の注意点(重要)
- ✅ 方法③ 正規表現(RegExp)を使ったワイルドカード置換
- ※中級者向け
- ・正規表現とは
- ・正規表現で置換する基本コード
- ・正規表現のメリットと注意点
- ✅ ワイルドカード置換でよくある失敗
- ※ここを読まないと事故りやすい
- ✅ 実務で安全に使うためのチェックポイント
- ※初心者でも必ず守ってほしい
- ✅ 実務での使い分け指針(初心者向け)
- ※迷ったらこの順番
- ✅ ワイルドカード置換を関数化する例
- ※再利用したい場合
- ✅ まとめ:VBAでワイルドカード置換を使いこなすポイント
✅ VBAで使う「ワイルドカード」とは何か
※誤解されやすいポイント
Excelの検索と置換と、VBAのReplaceは仕組みが違います。
・ワイルドカードの基本的な意味
ワイルドカードとは、
「どんな文字が来てもOK」というあいまい指定 のことです。
代表的な記号は次のとおりです。
*:任意の文字列(0文字以上)?:任意の1文字
これを使うことで、
完全に一致しない文字列もまとめて扱えるようになります。
・Excelの検索と置換との違い(重要)
ここが初心者が一番混乱しやすいポイントです。
- Excelの検索と置換
→ ワイルドカードがそのまま使える - VBAのReplace関数
→ ワイルドカードは使えない
つまり、
Replace(文字列, "商品A_*", "商品A")
のような書き方は そのままでは動きません。
VBAでワイルドカード置換を行うには、
別の方法を使う必要があります。
✅ VBAでワイルドカード置換を行う3つの方法
※ここを読まないと後で混乱します
VBAには複数の選択肢があります。
VBAであいまい置換を行う主な方法は、次の3つです。
Like演算子で判定してから ReplaceRange.Replaceを使う(Excel機能を利用)- 正規表現(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
・この方法のメリット
- 処理内容が分かりやすい
- 想定外の置換が起きにくい
- 初心者でもデバッグしやすい
参考:【VBA】部分一致の処理をする方法:Like演算子
✅ 方法② 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の設定に依存する
- 元に戻せない可能性がある
- 数式・書式にも影響する場合がある
👉
手軽だが、事故が起きやすい ため、
初心者の方は慎重に使いましょう。
✅ 方法③ 正規表現(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で足りないときの最終手段」と考えるのがおすすめです。
✅ ワイルドカード置換でよくある失敗
※ここを読まないと事故りやすい
- Replace関数でワイルドカードが使えると思い込む
- 対象範囲を広く取りすぎる
- 数値列や日付列まで置換してしまう
- テストせずに本番実行する
特に
Range.Replaceの使いすぎ は要注意です。
✅ 実務で安全に使うためのチェックポイント
※初心者でも必ず守ってほしい
- 対象列を必ず限定する
- 事前にコピーシートを作る
- 最初はLikeで判定する
- 想定外の文字列がないか確認
これだけで、
ワイルドカード置換の事故は大幅に減ります。
✅ 実務での使い分け指針(初心者向け)
※迷ったらこの順番
- Like演算子+If文
- Range.Replace(小規模・一時的)
- 正規表現(複雑な条件)
「いきなり正規表現」は、
初心者にはおすすめしません。
✅ ワイルドカード置換を関数化する例
※再利用したい場合
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演算子から始めて、
必要に応じてステップアップしていきましょう。