エクセルのシートからVBAで最終行と最終列を取る方法

自力で老眼回復

エクセルのVBAでプログラムをしていると、対象シートの最終行と最終列を取得したい、

ということが頻繁にあります。

最終行、最終列がわからなければ、どこまで処理してわからないからです。

例えば、売上台帳で1行ごとに利益の計算をしていくプログラムがあったとします。

下の表のような感じでエクセルシートに売上を入力し、プログラムで利益を計算します。

1行目 商品名 売上 原価 利益
2行目 すいか \2000 \900
3行目 メロン \4500 \2000
4行目 グレープフルーツ \500 \200
5行目

2行目からプログラムを始めればよいというのはすぐわかるのですが、問題はどこで終わらせればいいのかということですね。

この表の場合、4行目まで入力されているので、4行目までと決めて処理することもできます。

For y= 2 to 4

cell(y,5) = cell(y,3) – cell(y,4)

next y

こんな感じで。でもこれだと、5行目まで入力された場合、5行目の処理ができません。プログラムとしては使い物にならないですよね。

じゃあ適当に多めの行を取っておくという手もあります。

For y= 2 to 10000

cell(y,5) = cell(y,3) – cell(y,4)

next y

こんな感じで10000行目まで処理するようにしておけば、その行になるまでは大丈夫なわけです。

でも10000行入力されていないのに無駄な処理をすることになるし、なんかスマートじゃないですよね。

そこで最終行を取るメソッドが有効になります。

With ThisWorkbook.Sheets(“シート名”).UsedRange
endY = .Rows(.Rows.Count).Row
endX = .Columns(.Columns.Count).Column
End With

変数endYに最終行、変数endXに最終列が入ります。

これをプログラムの処理の先頭に入れておけば、無駄な処理をしなくて済みます。

With ThisWorkbook.Sheets(“シート名”).UsedRange
endY = .Rows(.Rows.Count).Row
endX = .Columns(.Columns.Count).Column
End With

For y= 2 to endY

cell(y,5) = cell(y,3) – cell(y,4)

next y

ただしこの方法はセルにデータが入っていなくても、罫線や塗などの書式設定や数式が入っていると、それも最終行とみなします。

データが入っている行だけ処理したい場合は、別の処理を加える必要があります。

まあ、とにかく手軽に最終行、最終列を取得したい、そんなときに使ってみてください。

最後までご覧くださりありがとうございます。

レクタングル大336×280
レクタングル大336×280

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

レクタングル大336×280