今回はセルが条件を満たすまで処理を繰り返すマクロを紹介したいと思います。
セルが条件を満たす間処理を繰り返すマクロ
それでは早速コードを紹介します。
今回はA列に氏名が入っている行がある分だけ繰り返し、性別に応じてセルの色を変更するマクロを例として紹介します。
![セルが条件を満たす間処理を繰り返すマクロ_1](https://masashi-blog418.com/wp-content/uploads/2023/10/image.png)
Sub check_Gender()
Dim i As Long
Application.ScreenUpdating = False
i = 1
Do Until Cells(1, 1).Offset(i, 0) = ""
If Cells(1, 1).Offset(i, 1) = "男" Then
'性別が「男」ならセル背景色を青に変更する
Cells(1, 1).Offset(i, 1).Interior.ColorIndex = 5
Cells(1, 1).Offset(i, 1).Font.ColorIndex = 2
ElseIf Cells(1, 1).Offset(i, 1) = "女" Then
'性別が「女」ならセル背景色を赤に変更する
Cells(1, 1).Offset(i, 1).Interior.ColorIndex = 3
Cells(1, 1).Offset(i, 1).Font.ColorIndex = 2
End If
i = i + 1
Loop
Application.ScreenUpdating = True
End Sub
実行すると「性別」列に「男」と入っているセルの背景色が青になり、「女」と入っているセルは赤になるのが分かるかと思います。
![](https://masashi-blog418.com/wp-content/uploads/2023/10/image-1.png)
コードの解説
それではコードについてざっくり解説します。
ポイントになるのはメインの処理になるDo Until...
になります。
それぞれ覚えておきたい所を分けて説明します。
繰り返し処理のDo Untilについて
そもそも
![](https://masashi-blog418.com/wp-content/uploads/2022/09/b0261.png)
Do Untilって何だっけ?
ってなる方もいると思うのでまずそちらから説明します。
Do Until
とは繰り返し処理の一つで、指定した条件を満たすまで処理を繰り返す、というものです。
書き方は以下のような感じです。
Do Until 条件式
【この中にある処理を繰り返す】
Loop
こんな感じでDo Until ~ Loop
に囲まれた処理が繰り返し対象になる、といった感じです。
例えばCnt = Cnt + 1
が入っていれば、指定した条件を満たすまでCnt
に1ずつ加算する処理が繰り返される、みたいなイメージです。
Do Until 条件式
'条件式を満たす(Trueになる)まで、ずっとCntに1ずつ加算される
Cnt = Cnt + 1
Loop
詳しくは以下の記事で紹介・解説していますので、よければこちらをご覧ください!
条件式のCells~Offsetについて
次に条件式であるCells~Offset
についてです。
Offset
についてざっくり説明すると基準になるセルから指定した値だけ移動し、移動先のセルを参照する処理になります。
あんまりイメージが湧かないと思うので具体例を挙げると、A1セルに対してOffset(1,0)
という風に指定すると、B1セルが返ってくるよ、という感じです。
'A1セル(番地:1行目1列目)から行方向(下)に1,列方向(右)に0移動する
Cells(1, 1).Offset(1, 0)
'【結果】
'B1セル(Cells(2,1))が参照先になる。
今回の例では「A列に氏名が入っている行がある分だけ」としているので、条件式にCells(1, 1).Offset(i, 0)
を指定して、参照先のセルが空欄になるまで処理させるようにしています。
そして繰り返し処理の最後に添え字であるi
に対して1を加算することで、1行ずつセルをチェックするようにしている、というわけです。
'Cells(1, 1)から1行ずつ下に移動し、空欄セルが見つかったら繰り返し処理を抜ける
Do Until Cells(1, 1).Offset(i, 0) = ""
~
'iに1を加算して再度繰り返し処理へ
i = i + 1
Loop
まとめ
今回はセルが条件を満たすまで処理を繰り返すマクロを紹介しました。
Do Loop
とCells.Offset
の組み合わせは様々な場面で役に立つので是非覚えておきましょう!
このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!
コメント