[0]はじめに
Zitanです。
Excelマクロで業務効率化をしよう!と思ったときに必ずといっていいほど
よく使う構文(?)があります。これからVBAを勉強してみたい、と思う人にはきっとお役立ちできるかと思います。理解して使えるようになると記録マクロから卒業する第一歩になります。
[1]前提
Excel(2016を使用)を開きます。
Sheet1に下の図のような表を用意します。
[2]これを使う
A列(社員番号)のデータが入っている最終行を取得します。
今回はデータが入っている最終行の行番号は「5」です。
記録マクロだとデータが増えたときに対応できませんが、
次に示す構文(?)を使うと、解決できます。
Dim lastRow As Long
lastRow = ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
.Cells(Rows.Count, 1).End(xlUp).Row
この部分について説明します。
※直前で、操作する対象を長々と指定していますが、これも結構大事です。
オブジェクト変数に入れて短く表現することもできますが、今回は割愛。
さて、分解して説明します。
.Cells(Rows.Count, 1)
Cells("行","列")でセル番地の場所を表します。
「Row.Count」によって、操作しているExcelシートの最終行を取得できます。
※あくまでもExcelの最終行です。"データが入っている"最終行ではありません。
Excel2016の最終行は1048576行目です。
「1」は1列目のことを指しています。1列目の最終行ということですね。
※別の記事でご紹介していますが
Enum(列挙型)を使うと列番号を直接入力するというハードコーディングから解放されます。
さて、話を戻しますが、「Row.Count」が返す結果は、
下の画像の場所のセルです。
取得したいのは、データが入っている最終行なので、更にこのコードを追加します。
.End(xlUp).Row
「Ctrl+↑」と同じ操作を行った際の着地行番号
すなわちここの行番号(5)が取得できます。
数値型の変数「lastRow」にデータが入っている最終行の行番号が代入されます。
[3]注意すべきこと
このコードは便利なのですが記述する場所に注意が必要です。
処理の途中でデータの入っている最終行が変化する場合は、
都度、プログラムコードの中で変数の値を初期化(上書き)する必要があります。
※最初は最終行が5だったけど他の処理を加えたことで、10になることもあるわけで。。。
その瞬間での最終行の行番号を取っているんだということをお忘れなきよう…。
[4]使い方と応用
実現したいことによって使い方は変わってくるのですが、
長くなるので別の記事でご紹介しようと思います。
[5]まとめ
いかがでしょうか。
他のサイト様でも、ググればすぐ出てくる内容なのですが、
ポートフォリオという都合上、応用記事をご紹介する前段として記事にさせていただきました。