For...Each...Next den anden vej!

Når man bruger en For...Each...next løkke til at gennemløbe cellerne i et område, tager den først alle kolonner i samme række, dernæst alle kolonner i næste række og så fremdeles.

Sub Test1()
    For Each c In Range("a1:c3").Cells
        MsgBox c.Value
    Next c
End Sub

Ovenstående kode gennemløber cellerne i rækkefølgen A1, B1, C1, A2, B2, C2, A3, B3, C3. I al almindelighed gør det ikke så meget, men af og til, er det vigtigt at kunne gennemløbe cellerne i kolonne først, altså A1, A2, A3, B1, B2, B3, C1, C2, C3.

Det kan man desværre ikke tvinge For...Each...Next til. I stedet kan man lave sin egen procedure, som vist nedenfor:

Sub Test2()
    Set rng = Range("A1:B6")
        For c = 1 To rng.Columns.Count
            For r = 1 To rng.Rows.Count
                MsgBox Cells(r, c).Value
            Next r
        Next c
End Sub

Som det fremgår består den at to "almindelige" For...Next løkker, den ene indlejret i den anden.

Den første gennemløber kolonnerne én ad gange fra 1 til sidste kolonne i området. Den anden sikrer at hver kolonner gennemløbes fra første række i området til sidste række i området, inden der gås videre til næste kolonne.

- Tilbage til makroer -
- Tilbage til Excel -