サイトアイコン エントレ|演劇動画ニュース

エクセルマクロ(EXCEL VBA) その20 検索結果の隣のセルを選択(FindとOffset)

エクセルマクロ(EXCEL VBA)

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 別ファイルを参照してコピー

 
(文:森脇孝/エントレ)

モバイルバージョンを終了