部品_最終列取得
GetLastColumn
https://feelcodelab.com/vba_parts/getlastcolumn/
・指定したブックの、指定したシートの、指定行の「データが入っている最後の列番号」を返す関数 ・xlToLeft を用いるため、空白が混在していても確実に最終列を取得できる ・見出し行(表の1行目)の右端を調べて、範囲の終了列を決める処理などで使用することが多い
土台
取得
シート
★【最重要】ブック(vWb)とシート名(vSheetName)は、必ず引数で指定する(省略できない)
→ ThisWorkbook = このマクロが入っているブック / ActiveWorkbook = いまアクティブなブック
→ ファイルを開く部品の後は、ActiveWorkbook が、開いたファイルに切り替わる。
開いた直後に、ActiveWorkbook を変数へ控えて、その変数を渡す
・対象は横方向の1行である(行番号で指定する)
・どの行を調べるかによって結果が変わる(通常は、見出し行を指定する)
・データが1件もない場合は 1 が返る
・設定の誤りは、原因を示すエラーで止まる(Err.Raise)
・Offset / Find / Resize / With は禁止・なし(土台の部品。他の部品を参照しない。単独で使用可能) ・他の部品から呼ばれる側(例:f_GetLastColumn → f_SetRange_Fixed に渡す終了列を作る)
・特になし
vWb : 対象のブック(Workbook)※必須(省略できない) vSheetName : 対象のシート名(String) vRowNum : 調べる行の行番号(Long)
Long : 指定行でデータが入っている最終列の列番号(データがないときは 1)
Long
Function 部品_最終列取得( _
ByVal vWb As Workbook, _
ByVal vSheetName As String, _
ByVal vRowNum As Long) As Long
部品_最終列取得 = f_GetLastColumn(vWb, vSheetName, vRowNum)
End Function
Function f_GetLastColumn( _
ByVal vWb As Workbook, _
ByVal vSheetName As String, _
ByVal vRowNum As Long) As Long
Dim ws As Worksheet
If vWb Is Nothing Then
Err.Raise vbObjectError + 1010, "f_GetLastColumn", _
"ブック(vWb)が設定されていません(Nothing)。"
End If
On Error Resume Next
Set ws = vWb.Worksheets(vSheetName)
On Error GoTo 0
If ws Is Nothing Then
Err.Raise vbObjectError + 1011, "f_GetLastColumn", _
"シート「" & vSheetName & "」が、ブック「" & vWb.Name & "」に存在しません。"
End If
If vRowNum < 1 Then
Err.Raise vbObjectError + 1007, "f_GetLastColumn", _
"行番号は 1 以上を指定してください(行番号=" & vRowNum & ")。"
End If
If vRowNum > ws.Rows.Count Then
Err.Raise vbObjectError + 1009, "f_GetLastColumn", _
"行番号がシートの行数の上限(" & ws.Rows.Count & ")を超えています(行番号=" & vRowNum & ")。"
End If
f_GetLastColumn = ws.Cells(vRowNum, ws.Columns.Count).End(xlToLeft).Column
End Function<例1:マクロのファイル(ThisWorkbook)の「データ」シートの、2行目(見出し行)の最終列> Dim lastCol As Long lastCol = 部品_最終列取得(ThisWorkbook, "データ", 2) <例2:見出し行の右端までを、範囲にする> Dim lastRow As Long Dim lastCol As Long Dim rng As Range lastRow = 部品_最終行取得(ThisWorkbook, "データ", 1) lastCol = 部品_最終列取得(ThisWorkbook, "データ", 2) '2行目の見出し行で最終列を取得 Set rng = 部品_範囲設定_固定(ThisWorkbook, "データ", 2, 1, lastRow, lastCol) ※ シート名が存在しない場合は、シート名とブック名を示すエラーで止まる (起点の On Error で受けて、Err.Description を表示する)
1.0
2026-10-27