はじめに
Excelで横方向にデータが並んでいる表を扱うとき、
「どこまで列が使われているのか」を知りたい場面があります。
列数が毎回変わる場合、最終列を自動で取得できると、
データ範囲の指定や処理の自動化がぐっと楽になります。
ここでは、VBAで最終列を取得する基本のコードと、そのしくみを解説します。
まずはコードを確認
Dim lastCol As Long
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
1行目を基準に、データが入っている一番右の列番号を取得するコードです。
コードのしくみを解説
どこを基準に最終列を探しているのか
このコードは 1行目 を基準にしています。
- Columns.Count
Excelの最終列番号(XFD列 → 16,384列)
- Cells(1, Columns.Count)
1行目の一番右のセル
- .End(xlToLeft)
右端から左方向に向かってデータがあるセルまでジャンプ
- .Column
見つかったセルの列番号を取得
つまり、
1行目の右端から左に向かってデータを探し、最初に見つかった列番号を返す
という動きです。
どんな場面で役立つのか
- 横方向にデータが増えていく表を扱うとき
- データ範囲を自動で指定したいとき
- 列数が毎回変わるファイルを扱うとき
行の最終行取得と同じく、実務でよく使う基本テクニックです。
あわせて知っておきたいポイント
別の行を基準にしたい場合
2行目を基準にするなら、行番号を「2」に変更します。
lastCol = Cells(2, Columns.Count).End(xlToLeft).Column
シートを指定したい場合
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("データ")
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
最終行もあわせて取得したい場合
行と列の両方を取得して、表の範囲を自動で扱うこともできます。
Dim lastRow As Long
Dim lastCol As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
使うときに気をつけたいこと
- 基準にする行にデータがないと正しく取得できません
→ もっとも確実にデータが入っている行を基準にしましょう。
- 途中に空白セルがあっても問題ありません
.End(xlToLeft) は右端から探すため、途中の空白は無視されます。
- 結合セルがある行は避けたほうが安全です
列番号の判定がずれることがあります。
まとめ
- 最終列の取得は、横方向のデータを扱うときに便利
- 1行目の右端から左に向かって探す方法がもっともシンプル
- 行やシートを変えるだけで応用も簡単
最終列を正しく取得できると、VBAでのデータ処理がより扱いやすくなります。

decopon
最終列の取得は、最終行と並んで「まず覚えておくと便利な基本」です。
この記事が、あなたのExcel作業を少しでもスムーズにする助けになればうれしいです。

moco
横にどこまでデータがあるか探すのも、VBAに任せてしまえば安心。
人は、もっと大事な判断に時間を使いたいよね。

コメント