Excel VBAにおいて、シート内で値が入力されているセルの最終行、最終列の数値を取得する方法はいくつか考えられますが、今回は私が最もよく使う方法をご紹介します。
(他にもいくつかあるため、そちらは随時追加していきます)
値が入力されているセルの最終行の番号を取得する
シート内で何らか値が入力されている最終行の番号を取得する方法のひとつとして、下記コードの使用が考えられます。
Cells(Rows.Count, 列数).End(xlUp).Row
1つずつ解説いたしますと、Cellsはセル番地を指定するためのプロパティです。
その中のRows.Countは、シート全体の最大行数をカウントした数になります。
(EXCEL97~2003ですと65536行、Excel2007以降は1048576行になります)
つまりCells(Rows.Count, 列数)は、
EXCEL97~2003ですと、指定した列の65536行目のセル番地
Excel2007以降は、指定した列の1048576行目のセル番地
となります。
次にEnd(xlUp)ですが、これはエクセルのショートカットで[Ctrl]+↑を押して選択するセルを移動させた状態になります。
つまり、指定した列の65536行目、または指定した列の1048576行目を選択した状態から、[Ctrl]+↑を押した事になりますので、何らかの値が入力されているセルがあればそこで止まったセルが選択され、何も入力されていなければ指定した列の1行目のセルが選択されているはずです。
最後に.Rowで選択されたセルの行数を取得する事で、シート内で値が入力されているセルの最終行を取得する事ができます。
下記の例では、変数MaxRowに、A列で一番最後に文字列が入力されている行数を取得して代入し、メッセージボックスに表示させています。
Sub 最終行の取得1() Dim MaxRow As Long MaxRow = Cells(Rows.Count, 1).End(xlUp).Row MsgBox MaxRow End Sub |
値が入力されているセルの最終列の番号を取得する
シート内で何らか値が入力されている最終列の番号を取得する方法のひとつとして、下記コードの使用が考えられます。
Cells(行数, Columns.Count).End(xlToLeft).Column
1つずつ解説いたしますと、Cellsはセル番地を指定するためのプロパティです。
その中のColumns.Countは、シート全体の最大列数をカウントした数になります。
(EXCEL97~2003ですと256列、Excel2007以降は16384列になります)
つまりCells(行数, Columns.Count)は、
EXCEL97~2003ですと、指定した行の256列目のセル番地
Excel2007以降は、指定した行の16384列目のセル番地
となります。
次にEnd(xlToLeft)ですが、これはエクセルのショートカットで[Ctrl]+←を押して選択するセルを移動させた状態になります。
つまり、指定した行の256列目、または指定した行の16384列目を選択した状態から、[Ctrl]+←を押した事になりますので、何らかの値が入力されているセルがあればそこで止まったセルが選択され、何も入力されていなければ指定した行の1列目のセルが選択されているはずです。
最後に.Columnで選択されたセルの列数を取得する事で、シート内で値が入力されているセルの最終列を取得する事ができます。
下記の例では、変数MaxColに、1行目で一番最後に文字列が入力されている列数を取得して代入し、メッセージボックスに表示させています
Sub 最終列の取得1() Dim MaxCol As Long MaxCol = Cells(1, Columns.Count).End(xlToLeft).Column MsgBox MaxCol End Sub |