Excelでデータを扱っていると、特定の列に値が入力されている最初の行(最上行)を取得したい場面があります。
例えば、データの開始位置を特定したり、条件付きで処理を分岐させたりする際に役立ちます。
この記事では、VBAを使って特定の列に値が入っている最上行を選択する方法をご紹介します。
1.やりたいこと
やりたいことは以下のように、値の入っていない行を飛ばして値の入っている一番上の行を選択する、というものです。
下記画像の状態では、赤枠のA列の10行目を選択します。

2.使用するVBAコード
以下のコードは、列Aに値が入っている最初の行を選択する処理です。
Sub SelectTopRowWithValueInColumnA()
Dim i As Long
For i = 1 To Rows.Count
If Cells(i, 1).Value <> "" Then
Cells(i, 1).Select
Exit For
End If
Next i
End Sub
このマクロでは、1行目から順にセルを確認し、値が入っている最初のセルを見つけた時点で選択するという流れになっています。
1-1.コードのポイント解説
Dim i As Long
行番号を格納するための変数を定義します。
For i = 1 To Rows.Count
1行目から最終行までループ処理を行います。
If Cells(i, 1).Value <> "" Then
列Aのセルに値が入っているかを判定します。
Cells(i, 1).Select
該当セルを選択します。
3.実行結果
マクロを実行すると、列Aに値が入っている最初の行が選択されます。
例えば、A列の10行目に最初の値がある場合は、セルA10が選択されます。
4.応用ポイント
今回紹介したコードは、以下の場面でも応用できます。
- 列A以外の列を対象にしたい場合(例:列Cなら
Cells(i, 3)
) - 値の種類に応じて条件を変更したい場合(例:数値のみ、文字列のみなど)
- 選択ではなく、該当行のデータを取得して別処理に渡したい場合
5.まとめ
今回紹介したコードは、特定の列に値が入っている最上行を選択するであり、このコード単体で利用する機会はあまり多くないかもですが、別のコードと組み合わせて利用することは多いと思うので知っておくと便利なコードです。
(参考)その他の書き方
Sub SelectFirstNonEmptyCellInColumnA()
Dim ws As Worksheet
Dim firstNonEmptyCell As Range
' シートを設定
Set ws = ThisWorkbook.Sheets("Sheet1") ' シート名を適切な名前に変更
' A列で最初の値が入っているセルを検索
Set firstNonEmptyCell = ws.Columns("A").Find(What:="*", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
' 最初の値が入っているセルが見つかった場合、そのセルを選択
If Not firstNonEmptyCell Is Nothing Then
firstNonEmptyCell.Select
Else
MsgBox "A列に値が入っているセルが見つかりませんでした。"
End If
End Sub