そもそも最終行、最終列って何?
表やデータのかたまりの行方向、列方向における終端になります。
図で示した方がわかりやすいので、ご確認ください。

この最終行、最終列を特定することでFor文などの繰り返し条件や配列の範囲指定に使うことができます。
最終行、最終列取得

実務で、Excelファイルを扱う時は毎回更新されているケースがほとんどだよね?
今回は行方向のデータや、列方向のデータが増えたり減ったりしても困らないような最終行、最終列の取得方法をみていくよ!



そうなんだよね~毎回行数や列数が増えたり減ったりするケースがほとんどだよ!
よろしくおねがいします!



イメージ図を先に載せておくね!





今日使うサンプルコードはこちらになります。
Sub col_row_enddata()
'ワークシート"Sheet1"を選択
Worksheets("Sheet1").Activate
'表の最終行取得
Worksheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Select
MsgBox "表の最終行 = " & Cells(Rows.Count, 2).End(xlUp).Row & "です"
Stop
'表の最終列取得
Worksheets("Sheet1").Cells(2, Columns.Count).End(xlToLeft).Select
MsgBox "表の最終列 = " & Cells(2, Columns.Count).End(xlToLeft).Column & "です"
Stop
End Sub



Sheet1に準備されたこの表を例に、最終行と最終列を取得してみましょう。


この表の場合、見てわかる通り
- 最終列は20
- 最終行は5 (E列)
ですね。この数値をサンプルコードを動かして取得していきましょう。
今回の記事を習得すると、この表の製品名や条件の数が増減しても最終行と最終列がそれぞれ取得できるようになります。
まずサンプルコード7行目、13行目で出てくるRows.Count、Columns.Countですが、これは単純に定数で下記値になります。
目的 | 記述 | 値 |
ワークシートの最終行取得 | Rows.Count | 1048576 |
ワークシートの最終列取得 | Columns.Count | 16384 |
Rows.Countはワークシートの最終行 = 最大行数(1048576)です。


Columns.Countはワークシートの最終列 = XFD列 = 最大列数(16384)です。


この定数とEndプロパティの組み合わせで表の最終行、最終列データを取得していきましょう。
Rangeオブジェクト.End(Direction)
Endプロパティを使うことで、データ(今回の場合表)が入力されている範囲の終端セルを取得することができます。
Endプロパティの引数は下記になります。
ExcelショートカットキーのCtrl + 矢印キーと同じ動作をするイメージです。
引数 | 方向 |
xlDown | 下 |
xlUp | 上 |
xlToLeft | 左 |
xlToRight | 右 |
サンプルコードと共にみていきましょう。
サンプルコード7行目で表の最終行を取得していますが、
Worksheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Select
Cells(Rows.Count, 2) → 2列目のRows.Countすなわち、”B1048576″セルである
↓ここから、


End プロパティのEnd(xlUp)を使って、下記セル(“B20”)を選択しています。


サンプルコード13行目で表の最終列を取得していますが、
Worksheets("Sheet1").Cells(2, Columns.Count).End(xlToLeft).Select
Cells(2, Columns.Count) → 2行目のColumnsCount、すなわち”XFD2″セルである、
↓ここから、


End プロパティのEnd(xlToLeft)を使って、下記セル(“E2”)を選択しています。


この方法により表の中に空白セル/空行/空列がある場合でも問題無く最終行、最終列を取得することが可能です。
最終行、最終列取得 まとめ
本記事で扱った、最終行、最終列取得手法は一度理解すると後は条件を変更するだけで、どのようなケースにも応用できます。ぜひサンプルコードを参考に習得していただければと思います。
VBA初級から抜け出すための知恵と、実務で活用できるスキルが学べる1冊です!激しくオススメ!


\ Excel VBA技術書も豊富 /
コメント