For Each で処理する順番

範囲を指定し、その中のセルを対象として順に処理をする。
例えば、こんな感じで。

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

確認したところ、このように、処理は行方向に進むようだ。
(=右に向かって処理が進み、端まで行ったら改行する)。
f:id:Infoment:20190819231942g:plain

これを列方向(=縦方向)から先に処理したい場合、どうすればよいか。
例えば、行・列指定のループで行から先に処理すれば簡単だ。

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

f:id:Infoment:20190819232701g:plain

これを、どーしても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

f:id:Infoment:20190819232945g:plain

このように、指定範囲を「列がたくさん集まったもの」と見做し、各列について処理する方法は、割と重宝する場合がある。お勧めです。
※テーブルの場合については、記述が異なります。

参考まで。