メインコンテンツへスキップ
【VBA】最終行と最終列を取得する

【VBA】最終行と最終列を取得する

··3 分
Programming VBA
かずさプログラマー
著者
かずさプログラマー
業務の作業自動化を行っています。Go、VBA、Pythonを主に使用しています。過去にはC#、VB.Net、JavaScriptも使用していました。

for文などで1行目から最終行、または1列目から最終列まで連続して処理を行いたいときがあります。 この記事では最終行と最終列を取得するVBAのサンプルコードをご紹介します。

A列に5行目までデータが入力されています。
1行目にF列(6列目)までデータが入力されています。

行が非表示であったり、フィルターやグループ化されていると正確な最終行が取得できません。 正確な最終行を取得するには下記のリンク先の方法を使用したほうが良いです。

最終列の取得は上記の最終行取得を応用したものになります。

Option Explicit

Function GetMaxRow(sht As Worksheet, check_col As Long) As Long
'###################################################################################
'指定した列のデータが入力されている最終行を取得する。
'行が非表示、フィルター、グループ化されていてもデータが入力されている最終行を取得できる
'参照元URL:https://www.excelspeedup.com/vbalastrow/
'-----------------------------------------------------------------------------------
'引数  :sht       シートオブジェクト[Worksheet]
'      :check_col  最終行を検索したい列番号[Long]
'戻り値:sht内のcheck_col列の最終行
'###################################################################################

  Dim lastRow As Long
  lastRow = sht.UsedRange.Row + sht.UsedRange.Rows.Count - 1
  GetMaxRow = 0
    
  Dim readRow As Long
  For readRow = lastRow To 1 Step -1
    If sht.Cells(readRow, check_col).Value <> "" Then
      GetMaxRow = readRow
      Exit For
    End If
  Next

End Function

Function GetMaxCol(sht As Worksheet, check_row As Long) As Long
'###################################################################################
'指定した行のデータが入力されている最終列を取得する。
'列が非表示、フィルター、グループ化されていてもデータが入力されている最終列を取得できる
'-----------------------------------------------------------------------------------
'引数  :sht       シートオブジェクト[Worksheet]
'      :check_row  最終列を検索したい行番号[Long]
'戻り値:sht内のcheck_row行の最終列
'###################################################################################

  Dim lastCol As Long
  lastCol = sht.UsedRange.Column + sht.UsedRange.Columns.Count - 1
  GetMaxCol = 0
    
  Dim readCol As Long
  For readCol = lastCol To 1 Step -1
    If sht.Cells(check_row, readCol).Value <> "" Then
      GetMaxCol = readCol
      Exit For
    End If
  Next
  
End Function

Sub TestGetMaxRowCol()
  
  '最終行を取得したいシートを宣言します
  Dim sht As Worksheet
  Set sht = ThisWorkbook.Worksheets("Sheet1")
  
  'シート内の1列目(A列)にデータが入力されている最終行をメッセージボックスで表示します
  MsgBox GetMaxRow(sht, 1)
  
  
  'シート内の1行目のデータが入力されている最終列をメッセージボックスで表示します
  MsgBox GetMaxCol(sht, 1)

End Sub

GetMaxRowとGetMaxColの動作確認をしてみます。
TestGetMaxRowColを実行するとGetMaxRowとGetMaxColをそれぞれ呼び出して、テストを行います。

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

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

関連記事

VBAでOption Explicitを書くべきか?
·2 分
Programming VBA
VBA エディターのおすすめ設定
·3 分
Programming VBA