Nếu tôi nhớ không lầm thì VBA dùng column-wise. Trong bộ nhớ array được ghi hết các rows trước khi sang dòng khác:

Một số người cho rằng vì vậy ghi/đọc theo column-wise nhanh hơn. Một số không màng bới vì bộ nhớ bây giờ có cache rất lớn, cách biệt rất nhỏ.
Phương pháp mà nhiều người ở GPE này hay dùng (vòng lặp j bên trong i) chính là cách truy cập column-wise cho nên các bạn ở đây không cần phải xem lại code mình.
Tôi không rõ trong bảng tính, Excel có đổi lại cách đọc/ghi hay không. Tôi đoán là có, bởi vì code sau đây cho ra khác.
Trong vòng lặp thứ nhất. Excel đọc range theo quy luật đọc container Cells: nếu range 2 chiều, cell thứ hai là phần tử đứng kề bên phải phần tử thứ nhất, chứng tỏ khi gộp tên cells, container Cells đã ghi chúng theo row-wise.
Trong vòng lặp thứ hai, VBA gặp truy cập range qua thuộc tính Value. Thuộc tính này chuyển range thành mảng 2 chiều cho nên nó tùy tiện theo luật mảng của nó.
(bạn có nhớ muốn Value trả về mảng 1 chiều thì phải dùng hàm Application.Transpose?)
Chú thích cho các bạn thích tìm hiểu về LTHĐT:
Thuật ngữ For Each là một ngữ pháp đổi mới theo tinh thần HĐT. Nó tùy theo kiểu của biểu thức đi ngay sao từ khóa IN mà quyết định duyệt cái 'container' trong biểu thức đó.
Trong code trên, nó tự biết [a1:c2] là một range, và [a1:c2].Value là một mảng.