2022年8月21日日曜日

【エクセルVBA】最終行の取得は最大行をチェックしないと失敗する

event_note8月 21, 2022

サンプルコード

特定列(lCol)の最終行を取得します。

Function GetMaxRow(lCol) As Variant Dim c As Range Set cl = Cells(Rows.Count, lCol) If cl.Value <> "" Then GetMaxRow = Rows.Count Else GetMaxRow = cl.End(xlUp).Row End IfEnd Function

 

ポイント解説 GetMaxRow= cl.End(xlUp).Rowだけではダメな理由

サンプルコードでは最終行を取得する処理(画像の③)だけでなく、条件(①)をつけています。

エクセルの使用中の最終行を取得する場合、③の処理のみでは失敗するケースがあります。それは、エクセルの最大行に値が入っている場合です。(↓の画像参照)

そのため、条件(①)を付けています。

上の画像のケースで、③の「GetMaxRow= cl.End(xlUp).Row」を実行するとGetMaxRow(最終行)=1行目となります。

しかし、正しくは②GetMaxRow=最大行(1048576行目)となるべき。ですから、条件①で、最大行のみ場合分けするようにしました。

 

最終行の取得は最大行をチェックしないと失敗する まとめ

最終行を取得する方法はいろいろありますが、Endを使って取得するときは最大行の値に注意する必要があります。

しかし、シートの最大行までは使わない!そんなにデータがない!ということであれば、③の「GetMaxRow= cl.End(xlUp).Row」のみで問題ありません。