はじめに
ExcelでVBAを使って作業をしていると、「セルの内容を下から上に向かって検索したい」という場面があります。
たとえば、「A列にたくさんの名前が並んでいて、その中で一番下にある“森”という苗字を探したい」といったケースです。
今回は、For Next
文とStep -1
を組み合わせて、セルを逆順に検索する方法を学びましたので、その内容をまとめます。
実現したいこと
- A列の中にある“森”という文字を下から上へ向かって検索
- 見つかったらそのセルをアクティブにして処理を終了する
使用したVBAコード
以下が、実際に使用したコード例です。
Dim c1 As Long
Dim i As Long
c1 = Range("A2").Column
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(i, c1).Value = "森" Then
Cells(i, 1).Activate
Exit For
End If
Next i
コードの解説
1〜2行目:変数の宣言
Dim c1 As Long
Dim i As Long
c1
は列番号(今回はA列)を格納する変数ですi
は行番号のカウントに使う変数です
3行目:A列の列番号を取得
c1 = Range("A2").Column
セルA2
の列番号を取得しています。今回はA列なので、c1 = 1
になります。
4行目:For文(下から上へ)
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
Cells(Rows.Count, 1).End(xlUp).Row
→ A列の最終入力行を取得To 1 Step -1
→ 行番号を1ずつ減らしながら上方向へループします
5〜7行目:検索条件と処理
If Cells(i, c1).Value = "森" Then
Cells(i, 1).Activate
Exit For
End If
- セルの値が「森」の場合、そのセルをアクティブにし、
Exit For
でループを終了します
8行目:Nextでループを継続
Next i
条件に一致するまでループが続きます。
応用のヒント
"森"
の部分を変数にすれば、検索対象を柔軟に変更可能です- アクティブにする代わりに、該当セルに色を付けたり、別の列にメモを入れたりすることもできます
- 別の列(たとえばB列)を対象にする場合は、
c1 = Range("B1").Column
のように調整してください
まとめ
Step -1
を使ったFor Next
文を活用することで、セルを下から上へ向かって検索する処理が簡単に書けます。
今回はA列を対象に「“森”という文字を下から探す」例をご紹介しましたが、
この方法は他の列や文字にも応用可能です。
VBAの柔軟なループ処理を活かせば、Excelでの自動化がさらに便利になります。
少しでも参考になれば幸いです。