VBAで最終行・最終列を取得する方法

最終行・最終列を取得 VBA

VABで、データの最終行や最終列を取得したいけど、どうやってやるのだろう…
そんな疑問を持っていませんか?

お悩みポイント
悩む人
  • 任意のセル範囲でデータの最終行や最終列を取得したい
  • 手動で範囲の終わりを、もう探したくない
  • データ範囲を動的に管理できるようになりたい

この記事では、VBAを使ってExcelの最終行や最終列を取得する方法を詳しく解説します。

「最終行・最終列」を効率よく取得することで、Excelでのデータ操作が簡単になり、作業の効率を大幅に向上させることができます。

使用例もすべてコピペして実行できるので、ぜひ最後までご覧いただき、実践してみてください。


【 この記事の概要 】

  よく使う度    5.0  
  難しさ     2.0  
  覚えておくと安心度    5.0  

この記事でできるようになること

この記事を読むことで、以下のことができるようになります。

この記事を見てできるようになること

VBAで最終行・最終列を取得する方法

「最終行・最終列の取得」とは、Excelシート上でデータが入力されている最後の行や列を動的に見つける操作のことです。

これにより、データがどこまであるかを把握し、その範囲を効率的に操作できます。

最終行・列とは?説明

最終行の取得

最終行を取得するには、以下のようなコードを使用します。

最終行から上昇し、行番号を取得する

次のコードは、シートの最終行から上方向に検索し、最初にデータが見つかった行番号を取得します。

最終行から上昇し、行番号を取得するとは?
コード
Dim lastRow As Long

lastRow = Cells(Rows.Count, "A").End(xlUp).Row
設定解説
  • Cells(Rows.Count, “A”)
    • 「列A」の最終行の番号(通常は1,048,576)を示すセルを指定しています。
      この「Cells(Rows.Count, “A”)」は、セル「A1048576」を指します。
      ※エクセルのバージョンで、最終行は異なります。
  • .End(xlUp)
    • 指定したセルから上方向に向かって最初にデータが入力されているセルを探します。
      これはExcelで「Ctrl + ↑」を押したときと同じ動作です。
  • .Row
    • 見つかったセルの行番号を取得します。
      これにより、データが入力されている最後の行番号が、任意の変数「lastRow」に格納されます。
よく使われる例

この方法は、表のデータが飛び飛びになっている場合や、途中に空白行がある場合に特に役立ちます。
空白行があっても、最下部からデータを探し始めるため、正確に最終行を取得できます。

指定したセルから下降し、行番号を取得する

次のコードは、シートの指定したセルから下方向に検索し、最後のデータが見つかった行番号を取得します。

指定したセルから下降し、行番号を取得するとは?
コード
Dim lastRow As Long

lastRow = Cells(2, "B").End(xlDown).Row
設定解説
  • Cells(2, “B”)
    • 最初に検索を開始するセルを指定します。
      この例では、セル「B2」です。
  • .End(xlDown)
    • 指定したセルから下方向に向かって最後のデータが入力されているセルを探します。
      これはExcelで「Ctrl + ↓」を押したときと同じ動作です。
  • .Row
    • 見つかったセルの行番号を取得します。
      この結果、データが入力されている最後の行番号が、変数「lastRow」に格納されます。
よく使われる例

この方法は、データが連続している場合や、空白行がない表形式のデータで特に有効です。
データが途中で途切れていない限り、正確な最終行を素早く取得できます。

最終列の取得

最終列を取得するには、以下のようなコードを使用します。

最終列から左に行き、列番号を取得する

次のコードは、シートの最終列から左方向に検索し、最初にデータが見つかった列番号を取得します。

最終列から左に行き、列番号を取得するとは?
コード
Dim lastCol As Long

lastCol = Cells(2, Columns.Count).End(xlToLeft).Column
設定解説
  • Cells(2, Columns.Count)
    • 「最終列」(通常は16,384列目)の2行目を示すセルを指定しています。
      この「Cells(1, Columns.Count)」は、セル「XFD2」を指します。
      ※エクセルのバージョンで、最終行は異なります。
  • .End(xlToLeft)
    • 指定したセルから左方向に向かって、最初にデータが入力されているセルを探します。
      これはExcelで「Ctrl + ←」を押したときと同じ動作をします。
  • .Column
    • 見つかったセルの列番号を取得します。
      この結果、データが入力されている最後の列番号が、変数「lastCol」に格納されます。
よく使われる例

この方法は、データが途中で途切れている場合や、空白の列が含まれている場合に特に有効です。
最終列からデータを探し始めるため、正確に最終列を取得できます。

指定したセルから右に行き、列番号を取得する方法

次のコードは、シートの指定したセルから左方向に検索し、最後のデータが見つかった列番号を取得します。

指定したセルから右に行き、列番号を取得する方法とは?
Dim lastCol As Long

lastCol = Cells(2, "B").End(xlToRight).Column
設定解説
  • Cells(2, “B”)
    • 開始するセルを指定します。
      今回の場合、セル「B2」です。
  • .End(xlToRight)
    • 指定したセルから右方向に向かって最後のデータが入力されているセルを探します。
      これはExcelで「Ctrl + →」を押したときと同じ動作です。
  • .Column
    • 見つかったセルの列番号を取得します。
      この結果、データが入力されている最後の列番号が、変数「lastCol」に格納されます。
よく使われる例

この方法は、データが連続している場合や、空白列がない場合に有効です。
連続するデータの最後の列を素早く特定できるため、効率的に操作を行えます。

VBA 最終行・最終列がよく使われる事例

最終行や最終列の取得は、以下のような場面でよく使用されます。

よく使われる事例
  • ループ処理でのカウンタとして使用
    • 最終行や最終列の取得は、データが入力されている範囲を動的に把握するために非常に有効です。
      特に、データの行や列が変動する環境でループ処理を行う場合、最終行や最終列をカウンタとして使用することで、正確な範囲を対象に処理を行うことができます。
  • グラフのデータ範囲を動的に更新
    • グラフのデータ範囲を自動的に更新するために、最終行や最終列を取得することがよくあります。
      表でデータが後から追加されるような場合、手動でグラフ範囲を調整するのは手間がかかりますが、最終行・最終列を使って動的に範囲を設定することで、常に最新のデータを反映したグラフを自動的に作成できます。
  • 表のデータを一括で削除
    • 表の全データを削除して新しいデータを入力する際にも、最終行や最終列の取得が役立ちます。
      表の範囲を動的に特定し、その範囲を一括でクリアすることで、不要なデータを効率よく削除することが可能です。

最終行・最終列を取得する際の注意ポイント

最終行や最終列を取得する際には、いくつかの注意点があります。

空白セルに注意する

最終行や最終列の取得では、空白セル (スペース) が含まれていると正しい範囲を取得できないことがあります。
データが飛び飛びになっている場合など、注意が必要です。

空白セルに注意するとはどういうこと?

適切なメソッドを使用する

データの最終行や最終列を正確に取得するためには、適切なメソッド(xlUpやxlToLeft)を使用することが重要です。
これにより、想定外の結果を防ぐことができます。

もう一度メソッドを確認
  • .End(xlUp)
    • 下から最終行を取得する際に使用します。
  • .End(xlDown)
    • 上から最終行を取得する際に使用します。
  • .End(xlToLeft)
    • 右から最終列を取得する際に使用します。
      ※左右の場合は、xlの後にToが付きます。
  • .End(xlToRight)
    • 左から最終列を取得する際に使用します。
      ※左右の場合は、xlの後にToが付きます。

「最終行・最終列」の使用例をご紹介

ここからは、最終行・最終列を取得する具体的な使用例を紹介します。

使用例1: 表の最終行までFor文で繰り返す

Excelシートの指定した列の最終行までループを行い、各セルに対して操作を実行する方法を紹介します。

主な使用用途:
表のデータを1行ずつ処理したい場合に使用します。
最終行を動的に取得するため、データの行数が増減しても正確に処理を行うことができます。

Sub LoopThroughRows()
    Dim lastRow As Long
    Dim i As Long
    
    '// 最終行を取得
    lastRow = Cells(Rows.Count, "B").End(xlUp).Row
    
    '// 2行目から最終行まで繰り返し処理を行う
    For i = 3 To lastRow
        ' セルに対して任意の処理を実行
        Cells(i, "E").Value = "処理済み"
    Next i
End Sub
動作概要
  • STEP1
    表全体の範囲を取得

    まず、表の最終行を取得します。
    Cells(Rows.Count, “B”).End(xlUp).Rowを使って、指定した列(この場合はB列)の最終行を動的に取得します。

  • STEP2
    最終行まで繰り返し処理を行う範囲を特定

    次に、取得した最終行までの範囲でFor文を使ってループ処理を行います。
    3行目から最終行まで繰り返し処理を実行します。

  • STEP3
    各行に処理を実行

    ループ内で、指定した列に対して「処理済み」と入力する操作を行います。

処理結果

「使用例1: 表の最終行までFor文で繰り返す」の動作結果

このコードで使用している機能

1行ずつ解説

コードの詳細
  1. Sub LoopThroughRows()
    • 新しいサブルーチン「LoopThroughRows」を定義します。
      このサブルーチンは、指定された範囲内で繰り返し処理を行います。
  2. Dim lastRow As Long
    • 最終行を格納するための変数「lastRow」をLong型で宣言します。
  3. Dim i As Long
    • ループのカウンタ変数「i」をLong型で宣言します。
      この変数は、繰り返し処理を行う際に使用します。
  4. lastRow = Cells(Rows.Count, “B”).End(xlUp).Row
    • この行は、B列の最終行を取得します。
      「Cells(Rows.Count, “B”)」は「B列」の最終行を指し、「End(xlUp)」はそのセルから上方向に向かって最初にデータが見つかった行を探します。
      これにより、最終行の行番号が変数「lastRow」に格納されます。
  5. For i = 3 To lastRow
    • 3行目から最終行までの範囲でループ処理を開始します。
      カウンタ「i」は「3」から「lastRow」までの値を取り、各行に対して処理を実行します。
  6. Cells(i, “E”).Value = “処理済み”
    • ループ内で、現在の行の「E列」に「処理済み」という文字列を入力します。
      これにより、対象の行に対して処理が完了したことを示します。
  7. Next i
    • ループの次のサイクルに移行し、次の行に対して処理を続行します。
      最終行に達するまで繰り返されます。
  8. End Sub
    • サブルーチンの終了を示しています。
      すべての処理が完了すると、このサブルーチンは終了します。

このコードは、Excelシートの指定された範囲内で繰り返し処理を行う際に非常に便利です。
特定の列に処理が完了したことを示すマークを付けるなど、データ処理の結果をわかりやすく可視化するために使用できます。
データが増減しても動的に最終行を取得して処理を行うため、効率的かつ柔軟な対応が可能です。

使用例2: 表の最終行にデータを追加する

指定された列の最終行を取得し、その次の行に新しいデータを追加する方法を紹介します。
新しいデータを表に追加していく作業に適しています。

主な使用用途 :
このコードは、Excelの表に新しいデータを追加する際に使用します。
既存のデータの末尾に新しいエントリーを追加する必要がある場合に便利です。

Sub AddDataToLastRow()
    Dim lastRow As Long
    
    '// 最終行を取得
    lastRow = Cells(Rows.Count, "B").End(xlUp).Row
    
    '// 最終行の次の行にデータを追加
    Cells(lastRow + 1, "B").Value = "新しいデータ"
End Sub
動作概要
  • STEP1
    表全体の範囲を取得

    表の最終行を取得します。
    Cells(Rows.Count, “B”).End(xlUp).Row を使用して、B列の最終行を動的に取得します。

  • STEP2
    最終行の次の行を特定

    取得した最終行の次の行を特定し、そこに新しいデータを追加します。

  • STEP3
    新しいデータを追加

    最後に、新しいデータをB列の最終行の次に追加します。

処理結果

「使用例2: 表の最終行にデータを追加する」の処理結果

このコードで使用している機能

1行ずつ解説

コードの詳細
  1. Sub AddDataToLastRow()
    • 新しいサブルーチン「AddDataToLastRow」を定義します。
      このサブルーチンは、指定された列の最終行を取得し、その次の行にデータを追加します。
  2. Dim lastRow As Long
    • 最終行の行番号を格納するための変数「lastRow」をLong型で宣言します。
  3. lastRow = Cells(Rows.Count, “B”).End(xlUp).Row
    • B列」の最終行を取得します。
      「Cells(Rows.Count, “B”)」は「B列」の最終行を指し、「End(xlUp)」はそのセルから上方向に向かって最初にデータが見つかった行を探します。
      この行番号が変数「lastRow」に格納されます。
  4. Cells(lastRow + 1, “B”).Value = “新しいデータ”
    • 「Cells(lastRow + 1, “B”)」で、最終行の次の行のB列に新しいデータを追加します。
      ここでは「新しいデータ」という文字列を入力しています。
  5. End Sub
    • サブルーチンの終了を示しています。
      すべての処理が完了すると、このサブルーチンは終了します。

このコードは、Excelの表に新しいデータを追加する際に非常に有効です。
最終行を自動的に検出し、その下にデータを追加することで、データが増えても簡単に管理できます。
ルーチン作業の一部を自動化するのに役立ち、作業効率を大幅に向上させることができます。

まとめ

「最終行・最終列の取得」は、Excel VBAでデータの範囲を動的に管理し、効率的に操作するために欠かせない技術です。

このスキルを使えば、データが増減する場面でも正確にデータ範囲を把握し、自動化された処理や分析を行うことができます。

ポイントのおさらい

この記事の使用例を実践することで、VBAでの最終行・最終列の取得方法をマスターし、さまざまなデータ操作の効率を上げることができます。

サンプルコードをコピーして実行し、少しずつ自分の業務に応じたアレンジを加えていくことで、VBAの活用範囲を広げましょう。

まずは、日常の業務に取り入れて、作業効率の向上を実感してみてください。

タイトルとURLをコピーしました