MacroCat@Siro - ExcelVBA・PHP・フリーランス

ExcelVBA、WEBスクレイピング、その他技術に関して書いていきます。

【ExcelVBA - Tips】最大行の取得

読者になる/フォローする

今週のお題「修学旅行の思い出」

ExcelVBAに関するTips

f:id:sirosiro346:20171003235423j:plain

コチラの記事は、ブログ管理人の開発メモです。
自分で調べ実際に使ったものだけを厳選して資産にするため、Tips + 一言コメントで記事を書いています。
たまーに詳しく説明を書く場合もあるかもしれません。
VBAの書き方で困った際に見つけやすいように記事にしています。


最大行の取得の頻度について

たとえば、以下のような一覧リストにデータを登録したい場合「最終行 + 1」の行に値を書き込む必要があります。
f:id:sirosiro346:20171030215149p:plain

上記以外にも、マスタに登録されている以下のようなマスタのデータ一覧を取得する場合、
2行目からデータが登録されている行までFor文などでループして取得または処理を行うケースがよくあります。
f:id:sirosiro346:20171030215508p:plain


取得方法について

いくつか方法があるのですが、私がやっている方法は以下です。

'概要:  指定列の最終行を取得
Function getMaxRow(longColNum As Long) As Long
    getMaxRow = ActiveSheet.Cells(Rows.Count, longColNum).End(xlUp).Row
End Function
簡易解説

・ActiveSheet
こちらは、現在開いているシートを指します。
必要に応じてWorksheets("シート名")に変更することで、シートを指定することができます。
その場合は、引数に追加したほうがいいかもしれません。

・Rows.Count
Rangeオブジェクトのプロパティなのですが、要は、
Excelの一番下の行」を指します。
Excel2007以降だと「1048576」で、それ以前だと「65536」が入ります。

・longColNum
これは、列を指定できるよう引数を設定しています。
1がA列、2がB列といった具合で設定できます。

・End(xlUp)
CELLを最上まで移動するといった意味です。
Rows.Countで一番下のセルに移動してから、「Ctrl+↑」を入力してヒットするところま移動するといったイメージ。

・Row
行を取得する処理です。


上記をすべて言葉で表現すると

指定した列の最終行から最上まで移動し、選択されたセルの行数を取得

となります。



最後に

きれいなコード、汎用性のあるコードは資産として取っておくべきです。
あれ?またこのコード書いているな?なんか似てるコード書いているような・・・
と思った場合はぜひ、メソッド化して汎用性のあるコードを残しておくことをお勧めします。


また、色々アップする予定ですのでお楽しみに。