【VBAで最終行列】VBAで適切に最終行と最終列を取得する方法【コピペでOK】
今回は、Excel VBAでワークシートの最終行と最終列を取得する方法を共有します。
最終行と最終列の概念
そもそも、ワークシートの最終行と最終列には、2つの概念があります。
1つ目は、「ワークシート内で使用されている最終行、最終列」です。
2つ目は、「文字が入力されている 最終行、最終列」です。
以下の画像を例にすると、
「ワークシート内で使用されている最終行、最終列」 はD4セルになります。
「文字が入力されている 最終行、最終列」 はC3セルになります。

「ワークシート内で使用されている最終行、最終列」 を取得する
まずは、1つ目の概念に基づく最終行、最終列を取得するコードを共有します。
1 2 3 4 5 6 7 8 9 |
' 「ワークシート内で使用されている最終行、最終列」 を取得 Public Function GetLastCell(ByRef sheet As Worksheet) As Range ' 使用済の最終セルを返却 With sheet.UsedRange Set GetLastCell = .Cells(.Cells.Count) End With End Function |
上記画像の例の場合、C4セルのRangeオブジェクトが返却されます。
「文字が入力されている 最終行、最終列」 を取得する
次に、2 つ目の概念に基づく最終行、最終列を取得するコードを共有します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
' 「文字が入力されている 最終行、最終列」 を取得 ' ※但し文字が入力されているセルがない場合はNothingを返却 Public Function GetLastCell(ByRef sheet As Worksheet) As Range ' 変数宣言 Dim cells As Variant Dim lastRowNumber As Long Dim rowNumber As Long Dim lastColumnNumber As Long Dim columnNUmber As Long ' A1セルから使用済最終セルの値を二次元配列に格納 With sheet cells = .Range(.cells(1, 1), .UsedRange.cells(.UsedRange.cells.Count)) End With ' 最終行列を初期化 lastRowNumber = 0 lastColumnNumber = 0 ' 全行走査(最終行から) For rowNumber = UBound(cells, 1) To LBound(cells, 1) Step -1 ' 全列走査(最終列から) For columnNUmber = UBound(cells, 2) To LBound(cells, 2) Step -1 ' セルに値が入っている場合 If cells(rowNumber, columnNUmber) <> "" Then ' 最終行番号が初期値の場合は行番号を記憶 If lastRowNumber = 0 Then lastRowNumber = rowNumber End If ' 既知の最終列番号よりも大きい場合は最終列番号を更新 If lastColumnNumber < columnNUmber Then lastColumnNumber = columnNUmber End If ' 処理対象行の最終列を取得できたので前行に移動 Exit For End If Next Next ' 結果返却 If lastRowNumber <> 0 And lastColumnNumber <> 0 Then Set GetLastCell = sheet.cells(lastRowNumber, lastColumnNumber) Else Set GetLastCell = Nothing End If End Function |
上記画像の例の場合、C4セルのRangeオブジェクトが返却されます。
まとめ
今回はExcel VBAで最終行と最終列を取得する方法を共有しました。
Excelを使用した仕事は多いと思います。今後もExcel VBAの知識を許攸していきますので、
業務効率化に役立てて頂ければと思います。