【VBA】最終行と最終列を取得する
概要
for文などで1行目から最終行、または1列目から最終列まで連続して処理を行いたいときがあります。
この記事では最終行と最終列を取得するVBAのサンプルコードをご紹介します。
A列に5行目までデータが入力されています。
1行目にF列(6列目)までデータが入力されています。

行が非表示であったり、フィルターやグループ化されていると正確な最終行が取得できません。
正確な最終行を取得するには経理・会計事務所向けエクセルスピードアップ講座さんの
「【落とし穴に注意】VBAで最終行の行番号を取得する」の「4.UsedRangeの結果に補正を加える方法」を
使用したほうが良いです。
最終列の取得は上記の最終行取得を応用したものになります。
1Option Explicit
2
3Function GetMaxRow(sht As Worksheet, check_col As Long) As Long
4'###################################################################################
5'指定した列のデータが入力されている最終行を取得する。
6'行が非表示、フィルター、グループ化されていてもデータが入力されている最終行を取得できる
7'参照元URL:https://www.excelspeedup.com/vbalastrow/
8'-----------------------------------------------------------------------------------
9'引数 :sht シートオブジェクト[Worksheet]
10' :check_col 最終行を検索したい列番号[Long]
11'戻り値:sht内のcheck_col列の最終行
12'###################################################################################
13
14 Dim lastRow As Long
15 lastRow = sht.UsedRange.Row + sht.UsedRange.Rows.Count - 1
16 GetMaxRow = 0
17
18 Dim readRow As Long
19 For readRow = lastRow To 1 Step -1
20 If sht.Cells(readRow, check_col).Value <> "" Then
21 GetMaxRow = readRow
22 Exit For
23 End If
24 Next
25
26End Function
27
28Function GetMaxCol(sht As Worksheet, check_row As Long) As Long
29'###################################################################################
30'指定した行のデータが入力されている最終列を取得する。
31'列が非表示、フィルター、グループ化されていてもデータが入力されている最終列を取得できる
32'-----------------------------------------------------------------------------------
33'引数 :sht シートオブジェクト[Worksheet]
34' :check_row 最終列を検索したい行番号[Long]
35'戻り値:sht内のcheck_row行の最終列
36'###################################################################################
37
38 Dim lastCol As Long
39 lastCol = sht.UsedRange.Column + sht.UsedRange.Columns.Count - 1
40 GetMaxCol = 0
41
42 Dim readCol As Long
43 For readCol = lastCol To 1 Step -1
44 If sht.Cells(check_row, readCol).Value <> "" Then
45 GetMaxCol = readCol
46 Exit For
47 End If
48 Next
49
50End Function
51
52Sub TestGetMaxRowCol()
53
54 '最終行を取得したいシートを宣言します
55 Dim sht As Worksheet
56 Set sht = ThisWorkbook.Worksheets("Sheet1")
57
58 'シート内の1列目(A列)にデータが入力されている最終行をメッセージボックスで表示します
59 MsgBox GetMaxRow(sht, 1)
60
61
62 'シート内の1行目のデータが入力されている最終列をメッセージボックスで表示します
63 MsgBox GetMaxCol(sht, 1)
64
65End Sub
GetMaxRowとGetMaxColの動作確認をしてみます。
TestGetMaxRowColを実行するとGetMaxRowとGetMaxColをそれぞれ呼び出して、テストを行います。
最初にGetMaxRowのテストを行います。
シート内の1列目(A列)のデータが入力されている最終行をメッセージボックスで表示します。

続いてGetMaxColのテストを行います。
シート内の1行目のデータが入力されている最終列をメッセージボックスで表示します。
