ラピードアクト株式会社

技術記事:ExcelVBAで仕事を効率化しようVol.6

みなさん、こんにちは。
ITソリューション事業部の林です。

本記事では、Excelシートの連続データを処理するときに大変便利な「終端行・終端列の求め方」について解説いたします。
ワークシートの終端行・終端列の位置情報は、「この列(行)のデータをすべて処理したい」というケースで必要になることが多いです。
データ量が可変するタイプのExcelファイルを処理するとき、データ量に合わせマクロが最適に動作するようになりますよ。

【目次】

  1. 終端行・終端列とは
  2. Excelシートの最終行・列を求める
  3. 終端行・列を求める
  4. 終端行・列を利用したプロシージャの例
  5. 終わりに

それでは、始めましょう!

終端行・終端列とは

終端のセルというのは、たとえばA列の中で一番下のデータありセルや、1行目の中で一番右側のデータありセルのことを指します。
ワークシートだと、以下の赤枠の箇所です。

このセルの行位置・列位置のことを終端行・終端列といいます。

これが求められるようになると、ワークシートのデータ量が増減したとしても、マクロを修正する必要がなくなります。
さらに、冒頭でも書きましたが、データ件数に合わせてマクロを動かせるため、動作が最適化されます。
基本的に、連続データを処理するマクロでは、「終端行(列)まで処理を繰り返す」という考え方がベターです。

ぜひ終端行・終端列の求め方をマスターして、効率的なマクロ作成の役にたててください。

Excelシートの最終行・列を求める

終端セルの求め方の前に、Excelワークシートの最終行・列の求め方について解説します。
終端と最終という似たワードでややこしいですが、ここでの最終行・列というのはワークシートの一番端のことです。

シートの最終行・列は、以下のプロパティで参照することができます。
最終行:Rows.Count
最終列:Columns.Count

イミディエイトウインドウで確認すると、以下の結果になります。

結果が数値で表示されるのは、Countプロパティがワークシートの行(Rows)の総数、あるいは列(Columns)の総数を表示しているからです。
このCountプロパティは、終端セルを求めるために必要な情報になります。

終端行・列を求める

終端行・列を求めるには、それぞれ異なる書き方をします。
終端行(A列の場合) :Cells(Rows.count, 1).End(xlUp).Row
終端列(1行目の場合):Cells(1, Columns.Count).End(xlToLeft).Column

少々長いですが、プロパティの意味を把握すれば覚えやすくなると思います。

まず、セルを指定するためにCellsを使用し、ここで先ほどの「Rows.Count」「Columns.Count」を使用します。
Cells(Rows.count, 1)は、A1048576(A列の最終セル)を指します
Cells(1, Columns.Count)は、XFD1(1行目の最終セル)です
セルのアドレスを求めるAddressプロパティで確認してみましょう。

次に「Endプロパティ」を使います。
これはCellsで指すセルの位置から見て、指定した方向に向けて、データの存在するセルを参照しにいきます。

Endプロパティの書式
End(Direction)

Directionで参照する方向を上下左右で指定できます。
上方向を参照:xlUp
方向を参照:xlDown
方向を参照:xlToLeft
方向を参照:xlToRight

Endプロパティで求めたセルが終端セルとなります。
Cells(Rows.count, 1).End(xlUp)は、A列の終端セルを指します
Cells(1, Columns.Count).End(xlToLeft)は、1行目の終端セルです

終端セルがわかったら、行番号を求める「Row」、列番号を求める「Column」を付ければ終端行・列が出てきます。

まとめると、
① Cellsを用いて、ワークシートの最終セルを求める
② Endを用いて、最終セルの位置から上下左右いずれかの方向へ、データを含むセル(終端セル)を参照しにいく
③ Row又はColumnを用いて、終端セルの終端行(列)を参照する

の順で終端行・列を求められます。

終端行・列を利用したプロシージャの例

例① 連続データの処理
指定した列の終端行まで処理を繰り返すプロシージャで用いる

Sub ExcelVBA006_01()
    Dim LastRow As Long '終端行を格納する変数
    Dim Idx As Long '行カウンタ変数
    
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row '終端行を求める
    For Idx = 1 To LastRow '1行目から終端行まで繰り返す
        Debug.Print Cells(Idx, 1).Value, Cells(Idx, 3).Value 'A列とC列の値を出力
    Next
End Sub

例② 1行目の終端セルに背景色を設定する
タイトル行(1行目)の右端をマーキングしたい場合に用いる

Sub ExcelVBA006_02()
    Dim LastColumn As Long '終端列を格納する変数

    LastColumn = Cells(1, Columns.Count).End(xlToLeft).Column '終端列を求める
    Cells(1, LastColumn).Interior.ColorIndex = 3 '1行目の終端セルの背景色を赤に変更
End Sub

例③ 連続データにデータを追加する
終端行の次の行に、新しいデータを追加する

Sub ExcelVBA006_03()
    Dim LastRow As Long '終端行を格納する変数
    
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row '終端行を求める
    Cells(LastRow + 1, 1).Value = InputBox("IDを入力") 'A列にIDを入力
    Range(Cells(LastRow + 1, 1), Cells(LastRow + 1, 4)).Borders.LineStyle = True '罫線を引く
End Sub

終わりに

終端行・列の求め方が理解できるようになると、連続データを処理するマクロが作りやすくなります。
特に、A列の終端行を求めるCells(Rows.count, 1).End(xlUp).Rowは利用するシーンが多いので、定型文として覚えることをおススメします。
プロシージャ例以外にも、終端行・列を有効活用する方法はありますので、いろいろ工夫して使ってみてください。

それでは、また次回お会いしましょう!