忍者ブログ
VBAによる実用アプリケーションの構築、およびGAS(Google Apps Script)やOffice Scriptへのモダンな移行パスを検証・解説するテックブログ。現場で即戦力となるコードモジュールや再利用可能な実用部品を継続的に提供します。

【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

2. プログラムの解説

それぞれの書き方の特徴とポイントです。

①【方法1】Forループによる順次チェック
1行目から最大行数(`Rows.Count`)まで順番に `Value = ""`(空白か)を判定していきます。データ群の途中に空行が混ざっている場合、「最初のすき間(空白セル)」を確実に特定したい時に便利です。ただし、データ量が膨大な場合は処理に少し時間がかかります。
②【方法2】End(xlUp) を使った最速取得(関数ライクな記述)
キーボードの「`Ctrl` + `↑`」の動きを再現するプロパティです。
ワークシートの最下端(`Rows.Count`)から上に向かってデータが存在するセルを探し、その行番号(`.Row`)に `+1` することで「連続したデータの一番下にある最初の空白行」を一発で取得できます。ループ処理を行わないため、超高速で動作します。

3. 実行結果

例えば、A1〜A5セルに値が入っていてA6セルが空白の場合:

6

どちらの方法でも、最初に見つかった空白行の行番号「6」がイミディエイトウィンドウに出力されます。



PR