【VBAを使えば数えなくていい!】最終行・最終列の取得方法を解説

VBAで最終行と最終列の取得方法を解説

シートで最後の行を数えてた・・・

VBAで最終行が一瞬で分かるの?

Excelで表を作るとき「データの最終行と最終列が知りたい!」と思うことがありますよね。

VBAを使えば数行のコードで最終行・最終列を取得できますが、やや複雑なコードなので初心者の方にも分かりやすく意味を解説していきます。

また、毎回コードを忘れてしまうという方の為にも(強引な?)覚え方を紹介するのでぜひ活用してみてください。

こんな方におすすめ

・忙しいので、最終行と最終列を取得するコードだけ知りたい

・最終行と最終列コードの意味まで知りたい

・毎回、最終行と最終列コードを忘れてググっているので覚え方があれば知りたい

結論

<最終行コードの書き方>

'A2から下方向に最終行を取得

Cells(2, 1).End(xlDown).Row  

'A列最後から上方向に最終行を取得

Cells(Rows.Count, 1).End(xlUp).Row 

<最終列コードの書き方>

'A2から右方向へ最終列を取得

Cells(2, 1).End(xlToRight).Column

'1行目の最後から左方向に最終行を取得

Cells(1, Columns.Count).End(xlToLeft).Column

・Endプロパティを使って、最終行は「下方向か上方向」最終列は「右方向か左方向」へ検索をしていき最終を取得する。また、Countプロパティを使うことでシートの最終セルを参照できる。

・最終行/列を取得するコードを忘れてしまう方の為に(強引な)覚え方として、「 セールがエンドでロウ/絡む 」を贈ります。(何のことか分からない方はページ下部まで)

最終行や最終列の取得方法はいくつかありますが、今回は汎用性の高いEndプロパティを使った方法を解説します。

「Endプロパティ」って何?

方向を指定してその方向の終端セルを取得することができるプロパティです。

'Endプロパティのコード

Rangeオブジェクト.End(引数)

※引数とは、プロパティ入れる決まった値のこと。

Endプロパティは[Ctrl]+[方向キー]と同じ動きをします。

最終行の取得

最終行の取得には「上から下方向に探す方法」と「下から上方向に探す方法」があります。

それぞれ利点と欠点があるので紹介します。

<最終行を上から下方向に探す>

利点:上から下方向に探すので感覚的に分かりやすい。

欠点:途中に空白があると正確に取得できない。

<最終行を下から上方向に探す>

利点:データの間に空白があっても正確に最終行を取得できる。

欠点:取得したい最終行の下にデータがあると、そこが最終行と判断されてしまう。

下方向だと空白があるとうまく取得できないので、「上方向へ探す」方法をおすすめします

下方向に最終行を取得

上から下方向に最終行を探しに行くイメージとしては、

①検索を開始するセルを選ぶ

②下方向に探しに行く

③最後に値があるセルを最終行とする

実際のコードは以下のようになります。

'A2から下方向に最終行を取得

Cells(2, 1).End(xlDown).Row  
下方向へ最終行を取得するコードの説明

※ただし、検索を開始するセルが「空白」の場合は最初に値のあるセルを最終行と認識するので注意してください。

何故このようになるのかは、Endプロパティの特性にあります。

空白セルから開始した場合のEndプロパティ

Endプロパティはキーボード入力の[Ctrl]+[方向キー]と同じ動きをします。

よって、空白セルから[Ctrl]+[方向キー]を押すと直近で値があるセルを取得する特性があるので、Endプロパティも同じ動きをすることになります

空白のセルから下方向へ最終行を取得する図

この特性を利用して、次に解説する「下から上方向に最終行を取得」することが可能になります。

上方向に最終行を取得

下から上方向に最終行を探しに行くイメージとしては、

①シート最終行のセルから開始する

②上方向に探しに行く

③最初に値があるセルを最終行とする

実際のコードは以下のようになります。

'A列最後か方向方向に最終行を取得

Cells(Rows.Count, 1).End(xlUp).Row 
「Rows.Count」って何?

「すべて行数」を返してくれるプロパティです。

Rowsプロパティ:「行」のことで「Rows」のみだと全ての行を表します。

Countプロパティ:「数をカウント」してくれます。

つまり、Rows.Countは「シート上のすべての行数をカウント」してくれます。

Rows.Countの説明

ちなみに・・・

Range(セルの範囲).Rows.Countとするとセルの範囲内で行数をカウントできます。

最終列の取得

最終列の取得には「右方向に探す方法」と「左方向に探す方法」があります。

それぞれ利点と欠点があるので紹介します。

<最終列を右方向に探す>

利点:感覚的に分かりやすい。

欠点:途中に空白があると正確に取得できない。

<最終列を左方向に探す>

利点:データの間に空白があっても正確に最終列を取得できる。

欠点:取得したい最終列の右にデータがあると、そこが最終列と判断されてしまう。

右方向に最終列を探す

右方向に最終列を探しに行くイメージとしては、

①検索を開始するセルを選ぶ

②右方向に探しに行く

③最後に値があるセルを最終列とする

実際のコードは以下のようになります。

'A2から右方向へ最終列を取得

Cells(2, 1).End(xlToRight).Column

左方向に最終列を探す

左方向に最終列を探しに行くイメージとしては、

①シート最終列のセルから開始する

②左方向に探しに行く

③最初に値があるセルを最終列とする

実際のコードは以下のようになります。

'1行目の最後から左方向に最終行を取得

Cells(1, Columns.Count).End(xlToLeft).Column

補足:最終行/最終列を取得するコードの(強引な)覚え方

上記に解説したコードを理解しても、いざVBAで使うときは忘れてしまうことがありますよね。

僕もよくコードを忘れて毎回google検索をしていました。

そこで、かなり強引ですがコードを覚えやすくする?語呂を考えたので参考にして頂けると嬉しいです。

「セールがエンドでロウ/絡む」

意味はありませんので、サラッと流してください。

覚え方は別にして、最終行と最終列を取得するコードでマクロをバシバシ作っていきましょう。

コメント

タイトルとURLをコピーしました