【VBA】1列目の最初の空白セル(最終行の次)を取得する方法!ループ処理とEnd(xlUp)関数の使い分け
Excel VBAでデータ一覧の末尾(最初の空白セル)を探して新しいデータを追加する処理は、自動化マクロの基本です。今回は、1行目1列目から上から順番に探す「Forループ」を使った方法と、実務でよく使われる「End(xlUp)関数(プロパティ)」を使って一瞬で取得する方法の2通りを解説します。
1. サンプルコード(Forループ版 / End(xlUp)版)
1行目1列目(A列)からセルをチェックし、最初に見つかった空白セルの行番号を出力します。
'【方法1】Forループで1行ずつ確認する従来の方法
Sub Macro2()
' 1行目1列からセルを読んで
' 最初の空白のセルを出力する
Dim ll As Long
Sheets("temp").Select
For ll = 1 To Rows.Count
If Cells(ll, 1).Value = "" Then
'---
'---空白ならForループを抜ける
'---
Exit For
End If
Next ll
'----
'---- 最初に見つかった空白行
'---
Debug.Print (ll)
End Sub
'【方法2】End(xlUp) を使って一瞬で求めるスマートな方法(推奨)
Sub Macro2_Fast()
Dim ll As Long
' A列の最終行から上にジャンプして最後のデータ行を取得し、+1 して最初の空白行を特定する
ll = Sheets("temp").Cells(Rows.Count, 1).End(xlUp).Row + 1
' データが1件も入力されていない(A1セルも空白)場合の考慮
If Sheets("temp").Range("A1").Value = "" Then ll = 1
Debug.Print (ll)
End Sub
Sub Macro2()
' 1行目1列からセルを読んで
' 最初の空白のセルを出力する
Dim ll As Long
Sheets("temp").Select
For ll = 1 To Rows.Count
If Cells(ll, 1).Value = "" Then
'---
'---空白ならForループを抜ける
'---
Exit For
End If
Next ll
'----
'---- 最初に見つかった空白行
'---
Debug.Print (ll)
End Sub
'【方法2】End(xlUp) を使って一瞬で求めるスマートな方法(推奨)
Sub Macro2_Fast()
Dim ll As Long
' A列の最終行から上にジャンプして最後のデータ行を取得し、+1 して最初の空白行を特定する
ll = Sheets("temp").Cells(Rows.Count, 1).End(xlUp).Row + 1
' データが1件も入力されていない(A1セルも空白)場合の考慮
If Sheets("temp").Range("A1").Value = "" Then ll = 1
Debug.Print (ll)
End Sub
2. プログラムの解説
それぞれの書き方の特徴とポイントです。
①【方法1】Forループによる順次チェック
1行目から最大行数(`Rows.Count`)まで順番に `Value = ""`(空白か)を判定していきます。データ群の途中に空行が混ざっている場合、「最初のすき間(空白セル)」を確実に特定したい時に便利です。ただし、データ量が膨大な場合は処理に少し時間がかかります。
1行目から最大行数(`Rows.Count`)まで順番に `Value = ""`(空白か)を判定していきます。データ群の途中に空行が混ざっている場合、「最初のすき間(空白セル)」を確実に特定したい時に便利です。ただし、データ量が膨大な場合は処理に少し時間がかかります。
②【方法2】End(xlUp) を使った最速取得(関数ライクな記述)
キーボードの「`Ctrl` + `↑`」の動きを再現するプロパティです。
ワークシートの最下端(`Rows.Count`)から上に向かってデータが存在するセルを探し、その行番号(`.Row`)に `+1` することで「連続したデータの一番下にある最初の空白行」を一発で取得できます。ループ処理を行わないため、超高速で動作します。
キーボードの「`Ctrl` + `↑`」の動きを再現するプロパティです。
ワークシートの最下端(`Rows.Count`)から上に向かってデータが存在するセルを探し、その行番号(`.Row`)に `+1` することで「連続したデータの一番下にある最初の空白行」を一発で取得できます。ループ処理を行わないため、超高速で動作します。
3. 実行結果
例えば、A1〜A5セルに値が入っていてA6セルが空白の場合:
6
どちらの方法でも、最初に見つかった空白行の行番号「6」がイミディエイトウィンドウに出力されます。
PR