日本語名

部品_最終列取得

英語名

GetLastColumn

URL

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 を表示する)

BASファイル(ダウンロード)

GetLastColumn.bas

バージョン

1.0

更新日

2026-10-27