Excel VBA

Excel VBAで最終行を取得する方法【繰り返し処理で必須】

Excel VBAでプログラムを作っていると、よく使うのが「最終行の取得」です。

最終行の取得方法はこれ

まずは、最終行を取得するためのコードを紹介します。

以下のようなエクセルシートを用意しました。
(A列にデータがあるイメージです。14行目までデータを入力しています)

今回は、A列の最終行を調べて、何行目かどうかをメッセージ表示するプログラムで説明したいと思います。

Sub 最終行()
  Dim lastRow As Long
  lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
  MsgBox "最終行は" & lastRow & "です。"
End Sub

このプログラムを実行すると以下ののメッセージが表示されます。

最終行の取得ができました。

コードの説明

プログラムだけでは分かりにくいので、コードの説明をします。

重要なのがこちらのコードです。

Sheet1.Cells(Rows.Count, 1).End(xlUp).Row

こちらのコードの意味は、分解していくと分かりやすいです。

まずはこちら

Sheet1.Cells(Rows.Count, 1)

「シート1の1列目のセルの一番下の行」という意味です。
一番下の行は、1,048,576行目のことです。

ここまでのコードだけでは、A1048576セルが選択されてしまいます。

そこで、次のコードを繋げます。

.End(xlUp)

.End(xlUp)を付けると1048576行目から上に行を移動できます。

あえて手で同じ操作をするとしたら「Ctrlキーを押しながら↑キーを押す」ようなイメージです。

一度でもCtrl+↑を押した経験のある方なら、どのような動作になるか分かると思います。

このコードを書くと、データのある行まで移動ができます。

つまり、データのある最終行で止まります。

最後は、このコードです。

.Row

.Rowを付けると、Ctrl+↑を押して止まった場所の行を取得できます。

今回のプログラムでいうと、14行目で止まるので、そこの行・・・14ということになります。

最終行取得が活躍するのはFor文

最終行の取得が活躍する場面を紹介したいと思います。

一番わかりやすいのが「For文との組み合わせ」です。

For文は、ある処理を繰り返す場合に使う構文です。

簡単なプログラムで紹介したいと思います。

先ほどのデータを数値に変更してみました。
1行目~14行目まで数値が入っています。

こちらの数値の符号を反転させるプログラムを書いてみたいと思います。

コードはこちら

Sub 符号反転()
  Dim lastRow As Long, i As Long
  lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
  For i = 1 To lastRow
    Sheet1.Cells(i, 1) = Sheet1.Cells(i, 1) * -1
  Next
End Sub

こちらのプログラムを実行するとこのようになります(符号が反転します)

符号を反転させることができる。

For文と相性がいい理由

For文と相性がいい理由を紹介します。

For文を初めて勉強する時「同じ処理を10回繰り返してみましょう」など回数が決まっていることがほとんどです。
ですが、実務では回数が決まっていることがあまりありません。

ある時は10回かもしれないし、他の時は170回かもしれない。
そんな時に、プログラムを確認して繰り返す回数を変更するのは現実的ではありません。

そこで便利なのが、最終行の取得です。

データの数が毎回違うのなら、最終行(データの数)を取得して、繰り返す回数を毎回変更するようにする方法があります。

先ほど紹介したコードを使えば、プログラムを書き換えることなく使い続けることができます。

あとがき

今回は、Excel VBAで最終行を取得する方法を紹介しました。

Excel VBAでプログラムを作成している時に一番使うコードといっても良いほど、よく使います。
最初は呪文のようで覚えるのが大変です(都度調べても問題ありません)

何度も使っていくと、何となく書けるようになります。

VBAはFor文を書けるようになると、業務改善が出来るようになります。

最初は大変ですが、実際に役立つコードが書けるようになると、楽しさも倍増します。

-Excel VBA
-, , , ,