指定したセル範囲の中で「ある文字列」を指定して、その文字列が最初に見つかったセル番地を返したり、一致するセル番地を最初から全て返したりする場合の方法について説明します。
セルの内容検索
指定したセル範囲のなかで検索条件に一致するセルを検索して、最初に見つかったセルを返す場合、
Rngeオブジェクト.Find(What:=検索条件)
を使います。条件に当てはまる結果が得られない場合は「Nothing」を返します。

この表から「アルバニア共和国」を検索する場合
Sub セル検索()
Dim xRange As Range ‘①検索用のセル
Dim bBox as String ‘②該当セル番地を格納する
Dim I As Long ’③何個目に見つかったのか
Dim xWord As String ‘④検索文字列
xWord = “アルバニア共和国” ‘⑤検索文字列の指定
Set xRange = Range(“B3:F22”).Find(What:=xWord) ‘⑥
If Not xRange Is Nothing Then ‘⑦
bBox = xRange.Address ‘⑧
xRange.Select ‘⑨
I = 1 ‘⑩
MsgBox xWord & “の” & I & “個目は、” & _
bBox & “にあります。” ‘⑪
End If
End Sub
⑥ セル範囲の中から検索文字列をセット
⑦ 検索文字列が見つかった場合
⑧そのセル番地を bBox に入れる
⑨見つかったセルを選択
⑩「I」に1 を代入
⑪ メッセージで表示

セルの連続検索
条件に一致する文字列が最初に見つかっても、継続してそれ以降も検索を続ける場合は
Rangeオブジェクト.FindNext(After:=検索開始セル)
Findメソッドによって検索を継続します。検索条件に一致するセルが最初に見つかっても、そのセル以降か方向に検索し該当するセルを返します。

同じこの表から「アジア」を検索します。
Sub 継続検索()
Dim xRange As Range
Dim bBox As String
Dim I As Long
Dim xWord As String
xWord = “アジア”
Set xRange = Range(“B3:F22”)._
Find(What:=xWord)
If Not xRange Is Nothing Then
bBox = xRange.Address
xRange.Select
I = 1
MsgBox xWord & “の” & I & _
“個目は、” & bBox & “にあります。”
’ここまでは前と同じです。
‘検索続行
Do
Set xRange = Range(“B3:F22”)._
FindNext(After:=xRange) ‘①
If Not xRange Is Nothing Then ‘②
xRange.Select ‘③
I = I + 1 ‘④
MsgBox xWord & “の” & I & “個目は、” & _
bBox & “にあります。” ‘⑤
End If
Loop Until bBox = xRange.Address ‘⑥
End If
End Sub
① 最初に見つかったセルから継続して検索を続けます。
② 次に検索文字列が見つかった場合
③ そのセルを選択
④ 変数「I」に1 を加え、何番目かカウントします。
⑤ メッセージ表示をします。
⑥ FindNextメソッドの検索は指定範囲の最後に達すると、最初に戻って検索を続行します。この重複検索を回避するために、最初に見つかったセル番地を bBoxに保存しておき、次のセルが見つかるたびに xBox と比較し、最初に見つかったセルになるまで検索を繰り返します。
この検索続行は少しわかりにくいかもしれません。実際に動かしてみてその動きを確認してください。
