エクセルのシートから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

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

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

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

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

amazonUnlimited


その使い方は損してますよ。

Amazon echo利用者の82.4%が利用している機能は音楽再生です。

つまり音楽再生機能を使っていない人は、Amazon echoの魅力の、ほんの一部にしか触れていないことになります。

Amazon Music Unlimitedなら月額580円(echoプラン)で音楽が聴き放題になります。

CDアルバム1枚分をダウンロードするのに2,000円近くかかるわけですから、CD1枚ダウンロードするたびに1420円損するのと同じことです。

しかも、Amazon Music Unlimitedだったら、CDアルバム何枚分でも聞き放題です。登録曲はなんと1憶曲以上! どれだけお得かがわかると思います。

30日間は無料なので、気に入らなければ、途中ですぐにやめれるので安心ですよ。

すぐに登録できるのでやらない手はありません。少しの行動で、お金が節約できて、 しかもAmazon echoの魅力を100%味わうことができるのですから。

Amazon Music Unlimitedの登録はこちら

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

シェアする

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

フォローする

レクタングル大336×280