Excel VBA Findメソッドの使い方 : 特定文字列の検索方法, 行列番号の取得, 応用マクロの書き方, 繰り返し処理の実装

Excel VBAのFindメソッドは、大量のデータから特定のキーワードを検索し、そのセルの位置情報(行・列)を瞬時に取得できる強力なツールです。特に、毎日・毎週繰り返すデータ確認やレポート作業において、その恩恵は計り知れません。

この記事では、Findメソッドを使った検索の基本から、行・列番号の取得、マクロの応用的な書き方、さらには繰り返し処理の実装に至るまで、現場で役立つノウハウを体系的に解説していきます。Excel初心者にも理解しやすいよう、コード例や出力結果を交えながら説明しますので、ぜひ最後までお読みください。


A. マクロ実装用データのダウンロード一覧

以下の表では、この記事で紹介する各種マクロのサンプルファイルや練習用Excelシートをダウンロードできます。内容ごとに整理してありますので、学習や業務への応用にぜひご活用ください。

No.内容の概要ダウンロードリンク
1.基本的な行番号取得マクロサンプルダウンロードはこちら
2.列番号取得とFind関数応用ダウンロードはこちら
3.セル参照に基づく柔軟なFindマクロダウンロードはこちら
4.複数語句の検索と行番号一括取得ダウンロードはこちら
5.繰り返し処理と変数への格納応用マクロダウンロードはこちら

B. 基礎編:Findメソッドの構文と基本的な使用方法の理解

まずは、Findメソッドの基本構文について確認しましょう。Findメソッドは以下のように使用されます:

Range(検索範囲).Find(What:=検索対象)

たとえば、A3〜A19のセル範囲において「粘度」という語句を検索し、行番号を取得するには、以下のようなマクロを書きます:

MsgBox Range(Cells(3, 1), Cells(19, 1)).Find("粘度").Row
  • Cells(3, 1) → A3セル
  • Cells(19, 1) → A19セル
  • .Row → 見つけたセルの行番号を取得

このコードは、指定した範囲内に「粘度」という語句が存在すれば、その行番号をメッセージボックスに表示します。

また、.Columnに変えれば列番号の取得も可能です。


C. 応用編①:変数やセル参照を用いた柔軟な検索処理の記述法

実務では、検索語句が変動するケースが多くあります。そのため、検索語句を直接入力せず、別のセルから取得する方法が有効です。

MsgBox Range(Cells(3, 1), Cells(19, 1)).Find(What:=Cells(3, 15).Value).Row

このコードでは、O3セル(3行15列)の内容を検索語として、A列内で検索を行います。これにより、検索語句が変更されてもマクロの修正が不要になります。


D. 応用編②:検索結果の格納と後続処理への展開方法

メッセージボックスではなく、検索結果(行番号)を変数に格納することで、他の処理に使えるようになります:

Dim r_num As Long
r_num = Range(Cells(3, 1), Cells(19, 1)).Find(What:=Cells(3, 15).Value).Row

この変数 r_num を使えば、以下のようにセルに書き出したり、条件分岐に使ったり、さまざまな処理が可能になります:

Cells(3, 16) = r_num

E. 応用編③:複数の検索語に対して繰り返し処理を実装する方法

複数の語句(例:「粘度」「比熱」「密度」)を一括で処理したい場合は、For文でループ処理を使うのが便利です。

以下のマクロは、O列(15列)に入力された3つの語句を検索し、それぞれの行番号をP列(16列)に出力します:

For i = 3 To 5
    r_num = Range(Cells(3, 1), Cells(19, 1)).Find(What:=Cells(i, 15).Value).Row
    Cells(i, 16) = r_num
Next i

ポイントまとめ:

  • Cells(i, 15).Value → 検索語句が格納されたセル
  • Cells(i, 16) → 結果出力先
  • For i = 3 To 5 → 3行目〜5行目を処理対象

F. トラブル回避:Findメソッドで検索失敗時のエラー処理

Findメソッドは、検索語が見つからないとNothingを返すため、エラー処理を入れることが大切です:

Dim c As Range
Set c = Range(Cells(3, 1), Cells(19, 1)).Find("存在しない語句")

If c Is Nothing Then
    MsgBox "該当データが見つかりませんでした。"
Else
    MsgBox c.Row
End If

まとめ:Excel VBA Findメソッドの活用で検索作業を自動化しよう

本記事では、Excel VBAのFindメソッドを使って、指定文字列の検索から行・列番号の取得方法、さらにセル参照による柔軟なマクロの記述方法、繰り返し処理の実装まで、幅広く詳しく解説しました。特に、実務でありがちな「複数ワードの検索と出力」「変数による処理展開」などは、知っておくと作業の自動化に大きく貢献します。

Excel VBA Findメソッドの使い方をしっかり習得し、日々の業務に活かしていきましょう。

Related posts