Home » ExcelVBA Rangeオブジェクト » Endプロパティ » 最終列番号を取得するVBAのコード

最終列番号を取得するVBAのコード

対象:Excel2003, Excel2007, Excel2010, Excel2013

最終行の行番号を取得するExcel VBA(Visual Basic for Applications)のコードをご紹介しました。

A列に空白のセルがない場合に使える
「Range("A1").End(xlDown).Row」
というコードと、
A列に空白のセルがある場合の
「Cells(Rows.Count, "A").End(xlUp).Row」
というコードです。

実務ではマクロの中で、データの入力されている最終列の列番号を取得したいということもあります。

そんなコードもご紹介しておきましょう。

考え方は、最終行の行番号を取得する方法と同じです。

[スポンサードリンク]

最終列番号を取得する基本

最終行なのか、最終列なのか、によって利用するプロパティや指定する引数が異なるだけです。
▼最終列の列番号をメッセージボックスに表示するコード
※1行目にデータが隙間なく入力されているときに最終列の列番号をメッセージボックスに表示する例
MsgBox Range("A1").End(xlToRight).Column

1行目に空白のセルがない場合は、上記のコードです。

Range("A1")から、データの途切れる終端セルをEndプロパティで取得するという考え方は、既にご紹介した最終列の場合と同じです。

終端セルを探す方向が、最終列の場合は下ですからEndプロパティの引数に「xlDown」を指定していました。

行の場合は、右方向に終端セルを探すので「xlToRight」をEndプロパティの引数に指定した「Range("A1").End(xlToRight)」というオブジェクト式にしています。

上記の例は、メッセージボックスに列番号を表示するものですから、「Range("A1").End(xlToRight)」というオブジェクト式で取得できるRangeオブジェクトのColumnプロパティを取得した「Range("A1").End(xlToRight).Column」をMsgBox関数の引数に指定しています。

変数に最終列の列番号を格納するのなら
 変数名 = Range("A1").End(xlToRight).Column
としてください。

1行目の最後のセルを選択したいのなら、Selectメソッドを使って
 Range("A1").End(xlToRight).Column.Select
です。

途中に空白セルがあるときに最終列番号を取得する

最終行を取得するときと同じく、最終列を取得するケースでも、1行目に空白のセルが存在している場合、上記のコードではダメです。

途中に空白セルがあると、空白セルの左隣のセルが終端セルと認識されてしまい、本来の最終列が取得できません。

1列目に空白セルがある場合は、以下のコードのほうがいいでしょうか。
▼最終列の列番号をメッセージボックスに表示するコード
※1行目の最終列の列番号をメッセージボックスに表示する例
MsgBox Cells(1, Columns.Count).End(xlToLeft).Column

Cellsプロパティの第2引数に指定されている「Columns.Count」というコードで、アクティブシートの列数が取得できるので
 Cells(1, Columns.Count)
というオブジェクト式は、
2003までのExcelの場合
 Cells(1, 256)
 Range("A256")
2007以降のExcelなら
 Cells(1, 16384)
 Range("A16384")
というオブジェクト式と同じ意味になります。
1行目の一番右端のセルを取得していることになります。

一番右端から、左方向の終端セルを探すので、Endプロパティの引数に「xlToLeft」を指定した「Cells(1, Columns.Count).End(xlToLeft)」というオブジェクト式で最終列が取得できます。

その列番号を表示するのでColumnプロパティを使って
 Cells(1, Columns.Count).End(xlToLeft).Column
というコードにしています。

最終列の列番号を変数に格納するのなら
 変数名 = Cells(1, Columns.Count).End(xlToLeft).Column
というコードですし、選択したいのならSelectメソッドを使って
 Cells(1, Columns.Count).End(xlToLeft).Select
としてください。

もちろん、1行目に空白セルが存在している可能性があるために「Cells(1, Columns.Count).End(xlToLeft)」というオブジェクト式にしているわけですから、1行目の最終セルが空白セルになっている可能性も否定できないはずです。その可能性があるのなら、この「Cells(1, Columns.Count).End(xlToLeft)」というオブジェクト式でも結局、最終列は取得できなくなってしまいます。

やっぱり、空白セルを作らないような業務ルールを、そもそも徹底しておくことが大切です。

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » Endプロパティ » 最終列番号を取得するVBAのコード

Copyright © インストラクターのネタ帳 All Rights Reserved.

.