Em cảm ơn anh đã chỉ bảo ạ. Em mới tìm hiểu về VBA nên vẫn còn mang tư duy của hàm excel để áp dụng.
Nhờ anh
@VetMini và
@batman1 nên em biết thêm được 2 cách viết code thay thế cho đoạn "If" dài dòng của em nữa
....
"biết" chưa đủ. Cần phải hiểu thấu đáo điểm chọn lựa giữa IF-THEN-ELSEIF-ELSE và SELECT-CASE (*)
Nếu bạn sửa lại code của mình cho hiệu quả hơn một chút (trung bình 3 lần so sánh thay vì 6)
If Target.Column = 4 Then
Me.Range("E" & Target.Row).Select
ElseIf Target.Column = 5 Then
Me.Range("F" & Target.Row).Select
Else If Target.Column = 6 Then
Me.Range("G" & Target.Row).Select
ElseIf Target.Column = 7 Then
Me.Range("J" & Target.Row).Select
ElseIf Target.Column = 10 Then
Me.Range("K" & Target.Row).Select
If Target.Column = 11 Then
Me.Range("L" & Target.Row).Select
End If
Thì hiệu quả hơn trước đó nhưng vẫn không hiệu qủa bằng Select-Case
Lý do: code trên vẫn phải truy cập trung bình 3 lần trị Target.Column
Với Select-Case, bạn chỉ truy cập Target.Column một lần, và dùng nó trong bộ nhớ để so sánh.
Như vậy:
1. nếu điều kiện chỉ là xét một biến hay biểu thức nào đó với nhiều kết quả khác nhau thì Select-Case là tốt nhất
2. nếu điều kiện thay đổi theo từng trường hợp thì If-Then-Else tốt hơn.
Ví dụ:
If Target.Column = 4 Then
Me.Range("E" & Target.Row).Select
ElseIf Target.Offset(0, 1).Column = 6 Then
' đừng thắc mắc chỗ vô duyên của nó, chỉ là ví dụ cho thấy biều thức so sánh có thay đổi
Me.Range("F" & Target.Row).Select
Else If Target.Column + 2 = 8 Then
Me.Range("G" & Target.Row).Select
...
End If
(trường hợp này Select-Case chả có lợi hơn gì cả)
(*) Trong một tài liệu nọ ở diễn đàn này, có phần khuyên dùng IF-ELSE chứ không nên SELECT-CASE. Theo tôi là người viết bài ấy không đủ kinh nghiệm về SELECT-CASE