Excelのマクロ(VBA)で空白になるまでループさせる方法
※ループしている斜めカットの替えテープ by Panasonic GH5+12-60mm
マクロを使っていると、「空白になるまでループ」させたいことはありませんか?
- 名簿に載っている名前の分だけループ
- 取得したファイルの数だけループ
- 請求書を作る会社の分だけループ
いろいろあると思います。
セルが空白になるまでループさせることができれば、一気に自動化になりますし、仕事が効率よく進みますよね。
ここでは、ループ文の復習・空白になるまでループさせる方法・途中で空白があってもセルが空じゃなければ続くループを紹介します。
Excelのマクロ(VBA):ループ文
ループ文は、ForとWhile~Loopがあります。
- Forは:ループする回数がわかっているときに使いやすい
- While~Loop:条件付きのループ
行数を取得できれば、今回の「空白になるまで」をFor文でもできますので、お好みでどうぞ。
For文の書き方
1からはじめて、10回までループさせるFor文はこのように書きます。
1For x = 1 To 10 Then
2 ' 実行したいコード
3Next
1や10を変更すると、はじまる値、終わりの値が変わりますね。
While~Loopの書き方
実行したいことの前に条件を確認するループ文
1Do While 条件
2 ' 実行したいコード
3
4 ' 条件変化
5Loop
実行したいコードを1回してから、条件を確認するループ文
1Do
2 ' 実行したいコード
3
4 ' 条件変化
5Loop While 条件
Excelのマクロ(VBA):空白になるまでループする条件式
While~Loopの場合は、空白になるまでループする条件式にしなければいけません。
その条件式はこちら
1Do While .Cells(x, 1) <> ""
2 ' 実行したいコード
3
4 ' 条件変化
5 x = x + 1
6Loop
While~Loopでは、条件式の偽の場合にループを抜けるようになっています。
ですので、不等号を使って「<> “”」空じゃないということ真でコードを実行するようにすると、「空白になるまでループ」ということになります。
これを使えば、名前が入力されている分、すべての処理ができます。
ただし、注意しないといけないのが、1行でも空白になっているとそこでループが終わってしまうことです。
Excelのマクロ(VBA):下から最終行を取得する方法
行の途中で空欄になっていると、While~Loopは終わってしまうので、まだ先があるということであれば、Excelの行の下から検索して空欄じゃないセルを見つけることです。
下から検索することで、行数を取得できるので途中の空欄があってもループが止まってしまうことはありません。
行の下から空欄じゃないセルを検索するには、End(xlUp)を使います。
1' Excelの最終行を取得
2ExcelLastRow = .Cells(Rows.Count, 1).Row
3
4' A列の最終行を取得
5LastRow = .Cells(ExcelLastRow, 1).End(xlUp).Row
Rows.Countで最終行を取得し、変数ExcelLastRowに代入
End(xlUp)で、ExcelLastRowから上にあがり、空白じゃないセルまでいきます。
その行数を、LastRowに代入し、最終行を取得となります。
Excel VBAを勉強するなら「できる大辞典」がおすすめです。
辞書なのでピンポイントで学ぶことができます。大学時代、2016年版を購入して勉強していましたが相当使いました。
ネットだけでも勉強はできますが、本を読みながらVBAを勉強したい方は購入してください。