【爆速】VBAのFindメソッドで検索を自動化!完全一致と部分一致の設定ミスを未然に防ぐ実戦コード

【業務効率化】VBA
スポンサーリンク

  • 「あの請求書データ、どこだっけ?」
  • 「顧客名簿から特定の名前を探すだけで、午前中が終わっちゃった…」
  • 「やっと見つけたと思ったら、似た名前の別人でやり直しになってしまった…」

そんな風に、Excelの画面を食い入るように見つめ、指がつりそうになりながら検索を繰り返したことはありませんか?

このような日常よくある課題は Excel VBAの「Findメソッド」を使えば、一瞬で解決できます。

今回は、実務で最もつまずきやすい「完全一致」と「部分一致」の使い分けを中心に、コピーしてすぐ使えるコードと一緒に解説します。

【業務効率化】VBAの記事を見る 

Findメソッドは実務を支える「ナビゲーター 」

VBAのFindメソッドは、指定した文字列がシートのどのセルにあるかを瞬時に特定してくれる、いわば「ナビゲーター」のような機能です。

手作業で行う「検索機能(Ctrl + F)」のプロセスを、プログラムが正確かつ高速に代行する仕組みとなります。 

手作業だと30分かかる1,000件の照合であっても、VBAを活用すれば、わずか1秒足らずで処理を完了させることができます。

時間の浪費をなくし、本来集中すべき重要なタスクへ時間を割り振ることが可能になります。 

検索精度を左右する「完全一致」と「部分一致」の構造

Findメソッドを使いこなす上で、最も重要となるのがナビゲーターへの指示の出し方です。

VBAでは「LookAt」という引数(パラメータ)を指定することで、検索の精度をコントロールします。この設定を誤ると、予期せぬデータを取得して重大なエラーを引き起こす原因となります。

  1. 完全一致 (xlWhole)
    例:「田中」という条件で検索した場合、セルの中身が「田中」の時だけ反応します。「田中」という条件で検索した場合、「田中」という単語そのものはもちろん、「田中太郎」や、文字列の途中に含まれるケースも含めてすべて検出されます。
  2. 部分一致 (xlPart)
    例:「田中」を探す時、「田中」さんも「田中太郎」さんも、なんなら「中野」さん(中に「中」があるからではなく、指定した文字が含まれていればOK)も見つけてしまいます。

ここを間違えると、「違うデータを見つけて大失敗」することになるので注意してください。

コピペでOK!検索自動化コード

実際に使えるコードを見てみましょう。
今回、A列から「特定の名前」を探して、その行の色を塗るプログラムを用意しました。

Sub FindExample()
    Dim targetRange As Range
    Dim findText As String
   
    ' 探したい文字を指定します
    findText = "田中"
   
    ' A列の中から検索を実行します
    ' LookAt:=xlWhole が「完全一致」の魔法の言葉です!
    Set targetRange = Range("A:A").Find(What:=findText, LookAt:=xlWhole)
   
    ' もし見つかったら、その場所(セル)に対して処理をします
    If Not targetRange Is Nothing Then
        MsgBox findText & "さんは " & targetRange.Address & " に見つかりました!"
        targetRange.Interior.Color = RGB(255, 255, 0) ' 黄色に塗る
    Else
        ' 見つからなかった場合
        MsgBox findText & "さんは見つかりませんでした。"
    End If
End Sub

ポイント解説

  • Set targetRange = …: 見つけた場所を「targetRange」という箱に保存します。
  • LookAt:=xlWhole: この記述が完全一致の指定となります。ここを「xlPart」に変更するだけで、簡単に部分一致の挙動に切り替えることができます。
  • If Not targetRange Is Nothing Then: 実務において重要なエラーハンドリングの記述となります。対象のデータが見つからなかった場合、この記述がないとVBAは実行時エラーを起こして強制終了してしまいます。「見つからなかった場合の逃げ道」を作っておくことが、安定した運用のコツとなります。

なぜ「完全一致」をデフォルトにすべきか

実務の自動化においては、特別な理由がない限り「完全一致(xlWhole)」をデフォルトとして採用することをおすすめします。

なぜなら、部分一致だと「101」を探しているのに「1010」や「2101」まで拾ってきてしまうからです。業務効率化のつもりが、誤データの山を作ってしまったら本末転倒ですよね。
人の手による確認ミスを限りなくゼロに近づけ、システムの信頼性を担保できることこそが、完全一致を指定する最大のメリットとなります。 

ぜひ試してみてください!

【業務効率化】VBAの記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

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