Tin tức mới

Cách chọn phạm vi dựa trên giá trị ô bằng Excel VBA

1. Tư duy logic

Trong VBA, để chọn một vùng dựa trên giá trị, chúng ta thường đi qua 3 bước:

Duyệt (Loop): Kiểm tra từng ô trong một cột hoặc vùng.

So sánh (Condition): Dùng câu lệnh If…Then để xem giá trị ô đó có khớp với điều kiện không.

Hợp nhất & Chọn (Union & Select): Lưu lại các ô thỏa mãn và chọn tất cả chúng cùng một lúc.

2. Các ví dụ điển hình

Ví dụ 1: Chọn tất cả các ô có giá trị cụ thể (Ví dụ: “Passed”)


Sub SelectRowsBasedOnValue()
    Dim cell As Range
    Dim targetRange As Range
    Dim MyVal As String
    
    MyVal = "Passed" ' Giá trị cần tìm
    
    ' Duyệt qua vùng C2:C11
    For Each cell In Range("C2:C11")
        If cell.Value = MyVal Then
            ' Nếu là ô thỏa mãn đầu tiên, gán vào targetRange
            If targetRange Is Nothing Then
                Set targetRange = cell
            Else
                ' Nếu đã có ô trước đó, dùng Union để gộp thêm ô mới vào
                Set targetRange = Union(targetRange, cell)
            End If
        End If
    Next cell
    
    ' Sau khi tìm xong, nếu có kết quả thì Select
    If Not targetRange Is Nothing Then
        targetRange.Select
    Else
        MsgBox "Không tìm thấy giá trị thỏa mãn!"
    End If
End Sub
Chọn cell dựa trên giá trị của ô trong vba excel
Chọn cell dựa trên giá trị của ô trong vba excel

Ví dụ 2: Chọn vùng dựa trên giá trị số (Ví dụ: Điểm> 5)


Sub ChonDiemCao()
    Dim r As Range
    Dim FinalRange As Range
    
    For Each r In Sheet1.UsedRange.Rows
      
        If IsNumeric(r.Cells(1, 2).Value) And r.Cells(1, 2).Value > 5 Then
            If FinalRange Is Nothing Then
                Set FinalRange = r
            Else
                Set FinalRange = Union(FinalRange, r)
            End If
        End If
    Next r
    
    If Not FinalRange Is Nothing Then FinalRange.Select
End Sub

Chọn vùng dựa trên giá trị số của ô trong VBA Excel
Chọn vùng dựa trên giá trị số của ô trong VBA Excel

Giải thích các lệnh quan trọng

  • Union(Range1, Range2): Đây là hàm cực kỳ quan trọng. Nó giúp bạn “gom” các ô rời rạc lại thành một khối duy nhất để thực hiện lệnh Select một lần duy nhất ở cuối vòng lặp. Điều này giúp code chạy nhanh hơn và tránh màn hình bị giật.
  • Nothing: Khi mới bắt đầu, biến targetRange chưa có gì cả (rỗng). Chúng ta cần kiểm tra Is Nothing để biết khi nào cần khởi tạo vùng chọn đầu tiên.
  • IsNumeric: Kiểm tra xem ô đó có phải là số không trước khi so sánh lớn hơn/nhỏ hơn để tránh lỗi nếu ô đó chứa chữ.

3.Mẹo nhỏ để nâng tầm Code

Trong thực tế, người ta rất ít khi dùng lệnh .Select vì nó làm chậm chương trình. Thay vì chọn, bạn có thể thực hiện hành động trực tiếp như:

  • targetRange.Interior.Color = vbYellow (Tô màu)
  • targetRange.Font.Bold = True (In đậm)

Leave a Reply

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