データのある最終行を取得する
・CurrentRegion
あるセルを含む連続したセル範囲を表します。
図のようにデータが入力されていたとき、セルA1のCurrentRegionは、セル範囲A1:B3となります。
これは、セルA1にアクティブセルを移動して、[Ctrl] + [Shift] + [*] キーを押して
選択される範囲と同じです。
・UsedRange
ワークシートで使用されているセル範囲を表します。
使用されているセル範囲とは、ワークシート内で使用されているセルのうち、
最も左上のセルと、最も右下にあるセルを対角線とした長方形のセル範囲です。
図のようにデータが入力されていたとき、このワークシートのUsedRangeはセル範囲A1:C7となります。
これは、アクティブセルをセルA1に移動して、[Ctrl] + [Shift] + [End] キーを押して
選択される範囲と同じです。
< ベーシック公式テキスト P80 >
「CurrentRegionプロパティは、途中に空行や空列を含む表の場合、最終行、列の取得には使えないな…。
UsedRangeプロパティは、一見良さそうだけど…」
森川くんはシートのA10セルを選択し、セルの背景色を黄色に変更します。
続けてVBEのイミディエイトウィンドウに、
"ActiveSheet.UsedRange.Select"
と入力し、[Enter]キーを押しました。
「…う~~ん。UsedRangeプロパティはあくまで、"データがあるセル範囲"ではなく、
"使用されたセル範囲"を返すんだよな…。
やはり、データのある最終行、列を取得するには、先輩が言う通り、
Endプロパティを使うのが鉄板なのか…」
彼はイミディエイトウィンドウに、続けて
"?Cells(Rows.Count, 1).End(XlUp).Row"
と入力すると、[Enter]キーを押しました。
「うん。この場合ちゃんと、データのある最終行"7"を返してる。
Endプロパティなら、指定した場所から指定した方向にジャンプして、
見つかったデータのあるセルを返すからな。
……表の最後に合計値を出力するような処理でUsedRangeプロパティを使ったら、
ユーザーが勝手にシートをいじって、はるか下の方に出力されてました……なんてことも、
Endプロパティなら防げるのか…。
さすが、岬先輩だなあ」
森川くんは手を休めると、窓の外に視線を移しポツリとつぶやきます。
「いい天気だなあ…。
岬先輩、なにやってるかなあ…」