【VBA】セルを検索して見つかった位置の情報を取得・操作する方法|Find関数の基本と活用

Excel VBAでデータを自動処理する際、特定の文字列を含むセルを検索し、そのセルに対して処理を行いたいという場面は非常に多くあります。
このような場合、Find 関数を使うことで、目的のセルを効率的に探し出し、関連するデータの取得や更新が簡単に実現できます。

本記事では、VBAの Find を使って、**「特定の文字列が含まれるセルを検索し、隣のセルを取得する」**という実用的な例をもとに解説いたします。


目次

コード例:文字列「森」を検索して隣のセルの値を表示する

Dim resultCell As Range
Set resultCell = Range("B3:B15").Find(What:="森")

If resultCell Is Nothing Then
    MsgBox "「森」という名前は見つかりませんでした"
Else
    MsgBox "森さんの得点は " & resultCell.Offset(0, 1).Value
End If

コードの解説

1. Range("B3:B15").Find(What:="森")

  • 指定された範囲(この例ではB列)から、文字列「森」を検索します。
  • 最初に該当したセルが resultCell に格納されます。

2. 検索結果の有無を判定

  • .Find の結果が Nothing だった場合は、「見つからなかった」と判断します。
  • 値が入っていれば、対象セルを基準に処理を行えます。

3. Offset(0, 1).Value で隣のセルを参照

  • 検索で見つかったセルの**右隣のセル(同じ行の1列右)**を参照しています。
  • たとえば、「森」がB5セルにある場合、resultCell.Offset(0,1) はC5セルになります。

使用例のイメージ

B列(名前)C列(得点)
鈴木80
92
高橋75

このような表に対してコードを実行すると、メッセージボックスに次のように表示されます:

森さんの得点は 92

応用:検索対象をシート全体に広げる場合

Cells.Find(What:="森")

このように書くと、ワークシート全体を対象に検索を行うことも可能です。
ただし、検索範囲が広いと意図しないセルが見つかる可能性もあるため、可能な限り検索対象は限定することを推奨します。


よくあるミスと注意点

ミス内容説明
Find の結果を Set せずに代入Range 型で取得する必要があります(Set を忘れずに)
大文字・小文字の区別デフォルトでは区別しません。厳密な比較をしたい場合はオプションを追加
検索範囲が狭すぎる対象のセルを見逃すことがあるため、範囲の指定は慎重に

まとめ

処理内容使用構文補足
特定の値を検索Range(...).Find(What:="キーワード")検索対象は適切に範囲指定
結果の有無を判定If resultCell Is Nothing Then見つからないケースに備える
隣のセルを参照.Offset(0,1).Value行・列のずれを調整して参照

Find 関数を活用することで、条件に合致するデータを動的に見つけて処理することが可能になります。
帳票処理、検索フォーム、データ更新マクロなど、幅広い業務に応用できますので、ぜひ実務に取り入れてみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次