Tin tức mới

VBA Excel duyệt từng hàng trong vùng chọn

1. Khái niệm cơ bản

Duyệt từng hàng trong vùng chọn được hiểu đơn giản là: Bạn có một tập hợp các hàng dữ liệu, và bạn yêu cầu máy tính đi đến từng hàng một, thực hiện một loạt hành động, sau đó mới chuyển sang hàng tiếp theo.

Range (Vùng): Là tập hợp các ô (ví dụ: B2:C11).

Row (Hàng): Là đối tượng đại diện cho dữ liệu của một dòng duy nhất trong vùng đó.

2 Cấu trúc


 For Each row In Range(Vùng).Rows
'Code thực thi
Next row

3. Phân tích cấu trúc câu lệnh

Mỗi thành phần trong câu lệnh đều có vai trò cụ thể:

For Each row: Khai báo rằng chúng ta sẽ lấy ra từng “đối tượng” một. Ở đây row là một biến đại diện (bạn có thể đặt tên là dong, r, v.v.).

In Range(Vùng).Rows: Xác định “tập hợp” mà chúng ta sẽ quét qua. Việc thêm đuôi .Rows cực kỳ quan trọng vì nó báo cho máy tính biết bạn muốn duyệt theo từng hàng, chứ không phải từng ô đơn lẻ.

Next row: Sau khi chạy hết các lệnh bên trong, lệnh này sẽ đẩy vòng lặp sang hàng kế tiếp bên dưới.

4. Cấu trúc logic (Pseudocode)

Hãy tưởng tượng bạn đang kiểm tra danh sách học sinh để tìm người thi đỗ:


CHO MỖI (Hàng) TRONG (Danh sách điểm)

Đọc cột "Điểm" của hàng hiện tại.

NẾU Điểm >= 5:

Ghi vào cột "Kết quả": "Passed"

NẾU KHÔNG:

Ghi vào cột "Kết quả": "Failed"
KẾT THÚC VÒNG LẶP

5. Ví dụ thực tế kiểm tra điểm sinh viên


Sub KiemTraDiem()
    Dim ws As Worksheet
    Dim rgn As Range
    Dim rw As Range
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set rgn = ws.Range("B2:C11")
    
    For Each rw In rgn.Rows
        If rw.Cells(1, 1).Value >= 5 Then
            rw.Cells(1, 2).Value = "Passed"
        Else
            rw.Cells(1, 2).Value = "Failed"
        End If
    Next rw
End Sub

Duyệt từng dòng trong VBA Excel
Duyệt từng dòng trong VBA Excel

6. Tại sao nên dùng .Rows thay vì duyệt từng ô?

Khi bạn làm việc với một “Hàng” (Row), bạn có những lợi thế sau:

  • Định dạng đồng nhất: Bạn có thể tác động lên toàn bộ hàng cùng lúc (ví dụ: row.Delete để xóa hàng hoặc row.Font.Bold = True để in đậm).
  • Truy xuất theo cột dễ dàng: Trong một hàng r, bạn có thể truy cập cột thứ 2 bằng lệnh r.Cells(1, 2). Số 1 ở đây nghĩa là “hàng đầu tiên của chính cái vùng đang xét” (tức là chính nó).
  • Tính đọc hiểu cao: Code của bạn sẽ giống như ngôn ngữ tự nhiên: “Với mỗi hàng trong vùng này, hãy làm việc A, việc B”.

7. Các lỗi thường gặp

Quên khai báo biến: Bạn nên dùng Dim row As Range ở đầu chương trình để tối ưu bộ nhớ.

Nhầm lẫn giữa Rows và Cells:

  • Range(“A1:B10”) -> Duyệt qua 20 ô (từng ô một).
  • Range(“A1:B10”).Rows -> Duyệt qua 10 hàng (mỗi lần xử lý một cụm 2 ô).

Thay đổi vùng dữ liệu khi đang lặp: Hạn chế việc thêm hoặc xóa hàng ngay trong vòng lặp For Each vì nó có thể làm máy tính bị “loạn” chỉ số hàng tiếp theo.

Leave a Reply

Your email address will not be published. Required fields are marked *