マクロ(VBA)
 PR

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に代入し、最終行を取得となります。

Sponsor link

Excel VBAを勉強するなら「できる大辞典」がおすすめです。

辞書なのでピンポイントで学ぶことができます。

大学時代、2016年版を購入して勉強していましたが相当使いました。

ネットだけでも勉強はできますが、本を読みながらVBAを勉強したい方は購入してください。

amazonで見てみる

ABOUT ME
ねこる
ねこる
管理者
Mac / プログラミング / Excel / マクロ(VBA) / カメラ

調べたり、効率的なことが好きです。

記事URLをコピーしました