Offsetで隣のセルを選択
前回、Findを使って文字列を検索し、検索結果のセルを選択できるようになりました。
今回は、その選択したセルの右隣とかを選択できるようになるOffsetについてご紹介します。
こちらの作品リストがあったとします。
マクベスと書いてあるセルを選択するには、
Cells.Find("マクベス").Select
とすればいいんでした。
これを実行すると、
マクベスのあるセル(A5)を選択できました。
この右隣(B5)を選択するために、マクロを少し修正します。
Cells.Find("マクベス").Offset(0, 1).Select
Offset(0, 1)を間に追加したということですね。
これを実行すると、
このように、一つ右のセルを選択できました。
一方で、Offset(1, 0)に修正すると、
Cells.Find("マクベス").Offset(1, 0).Select
一つ下のセルを選択することができました。
同じように、
Cells.Find("マクベス").Offset(-1, 0).Select
とすると、一つ上のセルが選択できます。
Findで見つけたセルの隣に文字列を入力する
隣のセルが選択できるようになったので、Findで見つけたセルの隣に「◎」を入れてみましょう。
Cells.Find("マクベス").Offset(0, 1) = "◎"
と書いてください。
これを実行すると、
マクベスの右隣に◎を入れられました。
例えば「住所録の名前で検索して、その10個右のセルにあるメールアドレスをコピーする」みたいなこともできるので便利に使えますね。
今回の最終的なコード
Sub tonari()
Cells.Find("マクベス").Offset(0, 1) = "◎"
End Sub
宿題-20
以下のファイルのように、1枚目のシートには「観劇リスト」、2枚目には「良かった公演リスト」があるとします。
「良かった公演リスト」にあるタイトルを参照して、元の「観劇リスト」のタイトルの右側に「☆」を付けてください。
解説
まずは、「良かった公演リスト」の一つ目である「真夏の夜の夢」を、「観劇リスト側」で選択してみましょう。
Sheets("観劇リスト").Cells.Find("真夏の夜の夢").Select
シートを指定するには、Sheets(“観劇リスト”)のように、セルの前付ければ良いですね。
続いて、Offsetを使ってその右側に、☆が入るようにします。右側というのは、列番号が一つ多いということなので、Offset(0, 1)とすれば良さそうです。
Sheets("観劇リスト").Cells.Find("真夏の夜の夢").Offset(0, 1) = "☆"
これを実行すると
うまく行きました。
今は「真夏の夜の夢」と打ち込んでいましたが、「良かった公演リスト」を参照する形に変形しましょう。
「真夏の夜の夢」は、Sheets(“良かった公演”)の、Cells(2, 1)にあるので、
yokatta = Sheets("良かった公演").Cells(2, 1)
と、一旦変数 yokatta に入れましょう。
これを先程のコードに代入すると、
yokatta = Sheets("良かった公演").Cells(2, 1)
Sheets("観劇リスト").Cells.Find(yokatta).Offset(0, 1) = "☆"
後は、良かった公演リストの2行目から4行目まで、For Nextで繰り返せば良さそうですね。
For i = 2 To 4
yokatta = Sheets("良かった公演").Cells(i, 1)
Sheets("観劇リスト").Cells.Find(yokatta).Offset(0, 1) = "☆"
Next
これを実行すると
☆を入れられました。
繰り返す作業は2行目から4行目としていましたが、最終行まで繰り返すとさらに良いですね。
Sub kensaku_hoshi()
lastRow = Sheets("良かった公演").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
yokatta = Sheets("良かった公演").Cells(i, 1)
Sheets("観劇リスト").Cells.Find(yokatta).Offset(0, 1) = "☆"
Next
End Sub
として完成です。
エクセルマクロ(EXCEL VBA) その21 別ファイルを参照してコピー
(文:森脇孝/エントレ)