みなさん、こんにちは。
ITソリューション事業部の林です。
本記事では、Excelシートの連続データを処理するときに大変便利な「終端行・終端列の求め方」について解説いたします。
ワークシートの終端行・終端列の位置情報は、「この列(行)のデータをすべて処理したい」というケースで必要になることが多いです。
データ量が可変するタイプのExcelファイルを処理するとき、データ量に合わせマクロが最適に動作するようになりますよ。
【目次】
それでは、始めましょう!
終端行・終端列とは
終端のセルというのは、たとえば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は利用するシーンが多いので、定型文として覚えることをおススメします。
プロシージャ例以外にも、終端行・列を有効活用する方法はありますので、いろいろ工夫して使ってみてください。
それでは、また次回お会いしましょう!