下図のような表があったとします。ここから「田中」を探して、右隣の数値を取得したいです。セルの検索には、何はともあれFindメソッドです。Findメソッドの使い方がわからないときは、マクロ記録してみましょう。
Sub Macro1() ' ' Macro1 Macro ' ' Cells.Find(What:="田中", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , MatchByte:=False, SearchFormat:=False).Activate End Sub
解説を簡単にするため、Findメソッドの引数は省略します。この記録されたコードを参考に、見つかったセルを変数Targetに格納して、右隣の数値を取得しましょう。
Sub Sample1() Dim Target As Range Set Target = Cells.Find(What:="田中") MsgBox "田中:" & Target.Offset(0, 1) End Sub
とりあえず検索はできましたが、それでは、グループ1とグループ2をそれぞれ検索するにはどうしたらいいでしょう。基本的なことですから「何を簡単な・・・」と感じる方もいるでしょう。確かに基本的なことです。ですが、この話をすると、意外と「へぇ」とか「知らなかった」と言われることが多いので、一応コンテンツとして書いておきます。
セルの検索をマクロ記録すると
Cells.Find
と記録されます。このCellsは、ワークシート上の全セルを意味します。ワークシート上の全セルから"田中"を検索したわけですね。つまり、Cellsが検索の対象範囲です。ということは、この検索の対象範囲に、任意のセル範囲を指定すればいいんです。なお、下記のコードは見つからなかったときの処理を端折っています。
Sub Sample2() Dim Target As Range, msg As String Set Target = Range("A2:A11").Find(What:="田中") msg = "田中:" & Target.Offset(0, 1) & vbCrLf Set Target = Range("C2:C11").Find(What:="田中") msg = msg & "田中:" & Target.Offset(0, 1) MsgBox msg End Sub
いくらマクロ記録されるからといって、Findメソッドで検索するとき、何でもかんでもCellsを対象にするのは下品ですね。