ExcelVBAでマクロを作っていると、最終列や最終セルを取得したい場面がよくあります。
- 表の横幅を自動で取得したい
- データ範囲を自動で指定したい
- 列数が増減する表に対応したい
最終行は正しく取れているのに、
最終列がズレて処理がおかしくなるのは初心者がとてもつまずきやすいポイントです。
この記事では、実務で安心して使える「最終列・最終セルの取得方法」を基本から解説します。
結論:最終列・最終セルも「使い分け」が重要
最終列・最終セルの取得方法も、状況によって使い分けます。
- ① 定番:見出し行を基準に最終列を取得
- ② 便利:UsedRange を使う方法
- ③ 最強:Find を使って本当に最後のセルを探す
①【定番】1行目(見出し行)を基準に最終列を取得する
「1行目に必ず見出しが入っている」表なら、この方法が一番シンプルで速いです。
Option Explicit
Sub GetLastColumn_Basic()
Dim ws As Worksheet
Dim lastCol As Long
Set ws = ActiveSheet
' 1行目を基準に最終列を取得
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
MsgBox "最終列は " & lastCol & " 列目です。", vbInformation
End Sub
ポイント
- 右端の列から左に向かって、データがある列を探す
- 見出し行がしっかり入っている表に向いている
②【便利】UsedRange を使って最終列を取得する
シート全体の「使っている範囲」を基準にしたい場合は、UsedRange を使います。
Option Explicit
Sub GetLastColumn_UsedRange()
Dim ws As Worksheet
Dim lastCol As Long
Set ws = ActiveSheet
lastCol = ws.UsedRange.Column + ws.UsedRange.Columns.Count - 1
MsgBox "UsedRange基準の最終列は " & lastCol & " 列目です。", vbInformation
End Sub
注意点
UsedRange は、過去に使ったセルが残っていると、
実際より右側まで「使っている」と判断されることがあります。
「最終列がやたら右になる」場合は、この影響を疑ってください。
③【最強】Find を使って最終セル・最終列を取得する
空白が混ざっていたり、列ごとにデータの入り方が違う表では、
Find を使う方法が最もズレにくく安全です。
シート内で「最後に使われているセル」を取得
Option Explicit
Sub GetLastCell_Find()
Dim ws As Worksheet
Dim lastCell As Range
Set ws = ActiveSheet
Set lastCell = ws.Cells.Find( _
What:="*", _
LookIn:=xlFormulas, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious)
If lastCell Is Nothing Then
MsgBox "シートにデータがありません。", vbExclamation
Exit Sub
End If
MsgBox "最終セルは " & lastCell.Address(False, False) & " です。", vbInformation
End Sub
最終行・最終列を個別に取りたい場合
Dim lastRow As Long
Dim lastCol As Long
lastRow = lastCell.Row
lastCol = lastCell.Column
この方法は、基準行・基準列に依存しないため、実務ではとても強力です。
おまけ:最終列までの範囲を自動取得する
最終行・最終列が分かれば、表全体の範囲を簡単に指定できます。
Dim rng As Range
Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol))
コピー・並び替え・フィルターなど、ほぼすべての処理で使える基本形です。
初心者がやりがちなミス
- 列途中に空白があるのに End(xlToLeft) を使ってズレる
- UsedRange を信じすぎて余計な列まで処理する
- 最終行と最終列で別の基準を使って範囲が歪む
「なんかズレるな?」と思ったら、Find を使う方法に切り替えるのがおすすめです。
まとめ:最終列・最終セル取得の使い分け
- 見出し行が安定している → End(xlToLeft)
- シート全体の使用範囲 → UsedRange
- 空白が混ざる・構造が不安定 → Find(最強)
最終列・最終セルの取得は、
VBAで「ズレない」「止まらない」処理を書くための重要な基本コードです。
ぜひ、あなたのVBAテンプレートに組み込んで活用してください。


コメント