範囲を指定し、その中のセルを対象として順に処理をする。
例えば、こんな感じで。
Sub test_1() Dim r As Range For Each r In Range("A1:H8") r.Interior.Color = 192 Application.Wait [Now()+"00:00:00.03"] Next End Sub
確認したところ、このように、処理は行方向に進むようだ。
(=右に向かって処理が進み、端まで行ったら改行する)。
これを列方向(=縦方向)から先に処理したい場合、どうすればよいか。
例えば、行・列指定のループで行から先に処理すれば簡単だ。
Sub test_2() Dim myRng As Range Set myRng = Range("A1:H8") Dim r As Long Dim c As Long For c = 1 To myRng.Columns.Count For r = 1 To myRng.Rows.Count myRng.Cells(r, c).Interior.Color = 192 Application.Wait [Now()+"00:00:00.03"] Next Next End Sub
これを、どーしてもFor Each で行いたい場合は、どーすれば良いか。
作ってみると、こんな感じ。
Sub test_3() Dim r As Range Dim c As Range For Each r In Range("A1:H8").Columns For Each c In r.Cells c.Interior.Color = 1192 Application.Wait [Now()+"00:00:00.03"] Next Next End Sub
このように、指定範囲を「列がたくさん集まったもの」と見做し、各列について処理する方法は、割と重宝する場合がある。お勧めです。
※テーブルの場合については、記述が異なります。
参考まで。