シートで最後の行を数えてた・・・
VBAで最終行が一瞬で分かるの?
Excelで表を作るとき「データの最終行と最終列が知りたい!」と思うことがありますよね。
VBAを使えば数行のコードで最終行・最終列を取得できますが、やや複雑なコードなので初心者の方にも分かりやすく意味を解説していきます。
また、毎回コードを忘れてしまうという方の為にも(強引な?)覚え方を紹介するのでぜひ活用してみてください。
最終行や最終列の取得方法はいくつかありますが、今回は汎用性の高いEndプロパティを使った方法を解説します。
方向を指定してその方向の終端セルを取得することができるプロパティです。
'Endプロパティのコード
Rangeオブジェクト.End(引数)
※引数とは、プロパティ入れる決まった値のこと。
Endプロパティは[Ctrl]+[方向キー]と同じ動きをします。
最終行の取得
最終行の取得には「上から下方向に探す方法」と「下から上方向に探す方法」があります。
それぞれ利点と欠点があるので紹介します。
<最終行を上から下方向に探す>
利点:上から下方向に探すので感覚的に分かりやすい。
欠点:途中に空白があると正確に取得できない。
<最終行を下から上方向に探す>
利点:データの間に空白があっても正確に最終行を取得できる。
欠点:取得したい最終行の下にデータがあると、そこが最終行と判断されてしまう。
下方向だと空白があるとうまく取得できないので、「上方向へ探す」方法をおすすめします。
下方向に最終行を取得
上から下方向に最終行を探しに行くイメージとしては、
①検索を開始するセルを選ぶ
②下方向に探しに行く
③最後に値があるセルを最終行とする
実際のコードは以下のようになります。
'A2から下方向に最終行を取得
Cells(2, 1).End(xlDown).Row
※ただし、検索を開始するセルが「空白」の場合は最初に値のあるセルを最終行と認識するので注意してください。
何故このようになるのかは、Endプロパティの特性にあります。
この特性を利用して、次に解説する「下から上方向に最終行を取得」することが可能になります。
上方向に最終行を取得
下から上方向に最終行を探しに行くイメージとしては、
①シート最終行のセルから開始する
②上方向に探しに行く
③最初に値があるセルを最終行とする
実際のコードは以下のようになります。
'A列最後か方向方向に最終行を取得
Cells(Rows.Count, 1).End(xlUp).Row
「すべて行数」を返してくれるプロパティです。
Rowsプロパティ:「行」のことで「Rows」のみだと全ての行を表します。
Countプロパティ:「数をカウント」してくれます。
つまり、Rows.Countは「シート上のすべての行数をカウント」してくれます。
ちなみに・・・
Range(セルの範囲).Rows.Countとするとセルの範囲内で行数をカウントできます。
最終列の取得
最終列の取得には「右方向に探す方法」と「左方向に探す方法」があります。
それぞれ利点と欠点があるので紹介します。
<最終列を右方向に探す>
利点:感覚的に分かりやすい。
欠点:途中に空白があると正確に取得できない。
<最終列を左方向に探す>
利点:データの間に空白があっても正確に最終列を取得できる。
欠点:取得したい最終列の右にデータがあると、そこが最終列と判断されてしまう。
右方向に最終列を探す
右方向に最終列を探しに行くイメージとしては、
①検索を開始するセルを選ぶ
②右方向に探しに行く
③最後に値があるセルを最終列とする
実際のコードは以下のようになります。
'A2から右方向へ最終列を取得
Cells(2, 1).End(xlToRight).Column
左方向に最終列を探す
左方向に最終列を探しに行くイメージとしては、
①シート最終列のセルから開始する
②左方向に探しに行く
③最初に値があるセルを最終列とする
実際のコードは以下のようになります。
'1行目の最後から左方向に最終行を取得
Cells(1, Columns.Count).End(xlToLeft).Column
補足:最終行/最終列を取得するコードの(強引な)覚え方
上記に解説したコードを理解しても、いざVBAで使うときは忘れてしまうことがありますよね。
僕もよくコードを忘れて毎回google検索をしていました。
そこで、かなり強引ですがコードを覚えやすくする?語呂を考えたので参考にして頂けると嬉しいです。
「セールがエンドでロウ/絡む」
意味はありませんので、サラッと流してください。
覚え方は別にして、最終行と最終列を取得するコードでマクロをバシバシ作っていきましょう。
コメント