特定の文字列が入力されているセルを検索したい場合、RangeオブジェクトのFindメソッドを使います。構文は次の通りです。
Rangeオブジェクト.Find(What:=検索する文字列, LookIn:=xlValues)
Findメソッドは、Rangeオブジェクトが表すセル範囲から「検索する文字列」に指定された文字列を含むセルを検索し、最初に見つかったセルをRangeオブジェクトで返します。見つからなかった場合はNothingを返します。
引数LookInはなるべく指定したほうがよいでしょう。その理由は次の囲みに記載しています。
引数LookIn、LookAt、SearchOrder、、MatchByteの設定はFindメソッドを実行するたびに保存されます。これは「検索と置換」ダイアログボックスにも反映されます。反対に「検索と置換」ダイアログボックスで設定を変更すると保存された値が変更されます。引数を省略した場合には(変更されたかもしれない)保存された値が使われます。そのため、不測の事態を回避するには明示的にこれらの引数を指定します。
設定が保存される引数:
引数 | 説明 |
---|---|
LookIn | xlValues、xlFormulas、xlCommentsのいずれかを指定する。xlValuesは値、xlFormulasは数式、xlCommentsはコメントを検索対象とする。 |
LookAt | xlWholeまたはxlPartのいずれかを指定。xlWholeはWhat引数で指定した内容と完全一致するもとを検索し、xlPartを指定すると部分一致するものを検索する。 |
SearchOrder | xlByRowsまたはxlByColumnsのいずれかを指定。xlByRowsは行方向、xlByColumnsは列方向の検索方向になる。 |
MatchByte | 全角と半角を区別する場合はTrue、区別しない場合はFalseを指定する。 |
次の例は「B2:B10」のセル範囲で"食品"という文字列を含むセルを検索します。
Sub sample()
Dim c As Range
Set c = Range("B2:B10").Find(What:="食品", LookIn:=xlValues, LookAt:=xlPart)
If Not c Is Nothing Then
MsgBox c.Value
Else
MsgBox "見つかりません!"
Exit Sub
End If
End Sub
データと実行結果は次の通りです。

目次
検索を繰り返す(FindNextメソッド)
Findメソッドは最初に見つかったセルを返しますが、同じ検索条件で続けて検索するにはFindNextメソッドを使います。構文は次の通りです。
Rangeオブジェクト.FindNext(セル)
FindNextは引数セルに指定された次のセルから検索を開始し、見つかったセルをRangeオブジェクトで返します。
検索が検索範囲の最後まで達すると、範囲の最初に戻って検索が続きます。最初に戻った時に検索を停止したいときは、最初に見つかったセルの位置を保存しておき、セルが見つかるたびにその位置と保存したセルの位置を比較します。