【VBAリファレンス|実務向け】ワイルドカード文字そのものを検索・置換する確実なテクニック

スポンサーリンク

導入:なぜワイルドカードの検索が重要なのか

Excelの検索機能において、「(アスタリスク)」や「?(クエスチョン)」といったワイルドカードは、あいまい検索を行う際に非常に強力なツールです。しかし、実務のデータ管理において、商品コードや型番の中に「」や「?」が文字として含まれている場合、通常通り検索しようとしてもExcelはそれを「任意の文字列」と見なしてしまい、正しくヒットさせることができません。この問題を放置すると、データの抽出漏れや誤った置換を引き起こす原因となります。本稿では、特殊記号を正しく扱うための「チルダ(~)」を使った回避策を解説します。

基礎知識:ワイルドカードの役割と「~」の正体

Excelの検索機能におけるワイルドカードには、主に以下の2種類があります。
・「」:0文字以上の任意の文字列
・「?」:任意の1文字
これらはExcelにとって「特別な命令」です。今回解説する「~(チルダ)」は、直後の文字を「命令」ではなく「ただの文字」として扱わせるための「エスケープ文字」という役割を持ちます。つまり、「~」を付けることで、Excelに対して「これはワイルドカードとしての意味を持たない単なる記号だよ」と指示を出すことができます。

実装/解決策:チルダを組み合わせて検索する

ワイルドカード文字そのものを検索したい場合は、検索窓に以下のように入力してください。
・「」を検索したい場合:~
・「?」を検索したい場合:~?
・「~」自身を検索したい場合:~~

なお、これはExcelの「検索と置換」ダイアログだけでなく、VBAの「Findメソッド」や「Like演算子」を使用する際にも全く同じルールが適用されます。

サンプルプログラム:VBAでワイルドカードを含むセルを特定する

VBAでワイルドカードを含むデータを自動的に特定するサンプルコードです。実務では、特定の列から型番に含まれる「」を検索して、そのセルを赤く塗りつぶすといった処理によく使われます。

Sub FindWildcardCharacter()
‘ 検索対象の範囲を設定
Dim rng As Range
Set rng = Range(“A1:A100”)

‘ 検索する文字(アスタリスクを検索するため、チルダを付与)
Dim searchStr As String
searchStr = “~”

‘ Findメソッドで検索を実行
Dim foundCell As Range
Set foundCell = rng.Find(What:=searchStr, LookIn:=xlValues, LookAt:=xlPart)

‘ 見つかった場合のみ処理を実行
If Not foundCell Is Nothing Then
Dim firstAddress As String
firstAddress = foundCell.Address

Do
‘ 対象セルを強調表示
foundCell.Interior.Color = vbRed
‘ 次のセルを検索
Set foundCell = rng.FindNext(foundCell)
Loop While Not foundCell Is Nothing And foundCell.Address <> firstAddress

MsgBox “ワイルドカード文字を含むセルを赤く塗りつぶしました。”
Else
MsgBox “対象となる文字は見つかりませんでした。”
End If
End Sub

応用・注意点:現場で陥りやすいバグ

1. 検索対象の混同:もし「~」自体を検索したい場合、チルダを二つ重ねて「~~」と入力する必要があります。これを忘れると、チルダ以降の文字がワイルドカードとして解釈されてしまい、意図しない検索結果になります。
2. VBAでのLike演算子:VBAで「If str Like “~” Then」のように判定を行う際も、このチルダのルールは必須です。特にユーザーが入力したフォームから値を受け取って検索する場合、あらかじめ文字列内の「」や「?」を「~」「~?」に置換しておく処理を組み込むと、堅牢なシステムになります。
3. 部分一致設定:Findメソッドを使用する際は、LookAt引数をxlPart(部分一致)にしておかないと、セル全体が「」である場合しかヒットしない可能性があるため注意してください。

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