【VBAリファレンス】Excelでワイルドカードを検索する方法|完全攻略ガイドとVBAによる自動化の実装

スポンサーリンク

概要

Excelにおけるデータ分析や管理業務において、ワイルドカード文字(「*」「?」「~」)そのものを検索・置換したいという状況は、意外と頻繁に発生します。例えば、アンケート結果の集計で「*(アスタリスク)」が含まれる特定の回答を抽出したい場合や、ファイルパス内の「?(クエスチョンマーク)」を置換したい場合などです。しかし、Excelの検索機能においてこれらの記号は「任意の文字列」や「任意の1文字」を指す特殊文字として扱われるため、単に検索ボックスに入力するだけでは意図した結果が得られません。本稿では、Excelの標準機能を用いた「エスケープ処理」の基本から、VBAを用いた高度な抽出処理まで、現場のプロが活用するテクニックを網羅的に解説します。

詳細解説

Excelでワイルドカード文字を検索するためには、「チルダ(~)」というエスケープ文字を使用する必要があります。チルダを対象のワイルドカードの直前に配置することで、Excelはその文字をワイルドカードではなく「単なる文字」として認識します。

1. アスタリスク(*)を検索する場合:検索値に「~*」と入力します。
2. クエスチョンマーク(?)を検索する場合:検索値に「~?」と入力します。
3. チルダ(~)そのものを検索する場合:検索値に「~~」と入力します。

この仕組みは、置換機能や「COUNTIF」「SUMIF」「VLOOKUP」などの関数でも同様です。例えば、A列に「*」が含まれるセルの個数をカウントしたい場合、単純に`=COUNTIF(A:A, “*”)`と記述すると、すべてのセルがカウントされてしまいます。正しくは`=COUNTIF(A:A, “~*”)`と記述する必要があります。

VBAによるワイルドカード検索の自動化

手動操作で対応できる範囲であれば上記の方法で十分ですが、大量のデータセットを扱う場合や、ユーザーフォームから動的に検索を行う場合にはVBAによる実装が不可欠です。以下に、指定範囲内からワイルドカード文字を含むセルを抽出し、そのアドレスをログとして出力するプロフェッショナルな実装コードを提示します。


Sub FindWildcardCharacters()
    ' 目的:指定範囲内からアスタリスク(*)を検索し、そのアドレスをイミディエイトウィンドウに表示する
    
    Dim ws As Worksheet
    Dim rng As Range
    Dim foundCell As Range
    Dim firstAddress As String
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set rng = ws.Range("A1:A1000") ' 検索対象範囲
    
    ' ワイルドカード文字そのものを検索するためにチルダ(~)を付与
    ' FindメソッドのLookAt:=xlPartは、セル内のどこかに含まれていればヒットする設定
    Set foundCell = rng.Find(What:="~*", _
                             LookIn:=xlValues, _
                             LookAt:=xlPart, _
                             SearchOrder:=xlByRows, _
                             MatchCase:=False)
    
    If Not foundCell Is Nothing Then
        firstAddress = foundCell.Address
        Do
            Debug.Print "発見場所: " & foundCell.Address & " 値: " & foundCell.Value
            Set foundCell = rng.FindNext(foundCell)
        Loop While Not foundCell Is Nothing And foundCell.Address <> firstAddress
    Else
        MsgBox "指定範囲内にアスタリスクは見つかりませんでした。"
    End If
End Sub

このコードの肝は、`Find`メソッドの`What`引数に`”~*”`を渡している点です。また、`FindNext`を使用することで、対象範囲内のすべての該当セルを網羅的に取得しています。実務では、この結果を配列に格納したり、別のシートにリストアップしたりすることで、データクレンジング作業を劇的に効率化できます。

実務アドバイス:検索の罠を回避する

現場でのトラブルで最も多いのは、ユーザーが「ワイルドカードを含んでいるつもり」で検索をかけているのに、結果が正しく返ってこないケースです。

・完全一致検索の落とし穴:`LookAt:=xlWhole`を使用する場合、検索値全体が対象セルと完全に一致する必要があります。「*」が含まれるセルを検索したい場合、`”~*”`ではなく`”*~**”`(アスタリスクを含む任意の文字列)のように、前後のワイルドカードを組み合わせて指定しなければならない点に注意してください。
・大文字・小文字の区別:`MatchCase:=True`を設定した場合、英字を含む検索では挙動が変わりますが、ワイルドカード自体の検索には直接影響しません。しかし、予期せぬヒットを防ぐためには、可能な限り条件を厳密に設定することが推奨されます。
・大規模データでのパフォーマンス:`Cells.Find`を使用するとシート全体を探索することになり、処理が非常に重くなります。`UsedRange`プロパティを使用して検索範囲を限定するか、配列にデータを読み込んでから判定を行う手法(`Like`演算子を使用)を検討すべきです。

`Like`演算子を用いた判定ロジック例:


If cell.Value Like "*~**" Then
    ' ここに処理を記述
End If

このように、VBAの`Like`演算子でもチルダによるエスケープが有効であることは、中級者以上であれば必ず押さえておくべき知識です。

まとめ

Excelにおけるワイルドカード検索は、一見単純ですが、チルダ(~)というエスケープ文字を正しく理解し使いこなすことで、その活用範囲は飛躍的に広がります。標準機能での検索・置換から、VBAを用いた高度な自動化、さらには`COUNTIF`等の関数による集計まで、ワイルドカードを「制御」できる能力は、Excelスキルを一段上のステージへ引き上げる鍵となります。

特に、業務フローの中で不特定多数のユーザーが入力するデータには、ワイルドカード文字が意図せず混入することがあります。これを「ゴミデータ」として処理するのではなく、適切に検索・クレンジングできるスキルを持つことは、データ品質の保持という観点からも非常に重要です。今回紹介したコードや考え方を、ぜひ明日からの実務で活用し、より正確で効率的なExcelライフを実現してください。プロフェッショナルなエンジニアは、ツールを「使う」だけでなく「制約を理解して使いこなす」のです。

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