Option Explicit
Sub LocTheoTri2Cot() 'Tên của macro
Dim lrow As Long, Wf As Long 'Khai báo hai biến có kiểu Long
Dim Col1 As Byte, Col2 As Byte 'Khai báo 2 biến có kiểu Byte để lưu giữ trị số cột trang tính'
Application.ScreenUpdating = False 'Dòng lệnh tránh cập nhật màn hình'
lrow = [a65500].End(xlUp).Row 'Dòng có dữ liệu cuối cùng của cột 'A' được gán vô biến kiểu Long'
Range([F6], Cells(lrow + 9, "J")).Clear 'Xoá vùng đủ chổ cho macro đưa kết quả vô sau đó'
Range([f5], [h5]) = Range([A1], [C1]).Value 'Gán trị cho vùng F5-H5 từ vùng A1-C1'
Col1 = Choose([e3], 1, 1, 2) 'Dùng hàm CHOOSE() trong VBA để chọn cột cần so sánh, đối chiếu ; Trị này được ta nhập vô ô [F3]
Col2 = Choose([e3], 2, 3, 3) 'Cũng như dòng lệnh trên; Nhưng đó sẽ là cột thứ hai cần so sánh'
For Wf = 2 To lrow 'Tạo vòng lặp từ dòng thứ 2 đến dòng cuối chưa dữ liệu (Cột 'A')'
Select Case Left([f3], 1) 'Xét điều kiện là ký tự đầu tiên ta đã nhập vô [F3]
Case ">" 'Nếu là ký tự '>' '
If Cells(Wf, Col1) >= Cells(Wf, Col2) + [f1] Then 'Nếu giá trị trong cột chọn so sánh trước > hay bằng trị trong cột thứ 2 + trị trong [F1], thì
Cells(Wf, 1).Resize(, 3).Copy Destination:=[f65432].End(xlUp).Offset(1)
'Dòng thoả điều kiện được chép đến nơi cần chép
Cells([f65432].End(xlUp).Row, "I") = Wf 'Ô bên phải thuộc dòng chép đến nêu trên được gán giá trị dòng vừa chép.(Nhằm xác định & kiểm chứng'
End If 'Kết thúc điều kiện If
'Các dòng sau cũng tương tự, nhưng hướng xét sẽ ngược lại với hướng trên
Case "<"
If Cells(Wf, Col1) <= Cells(Wf, Col2) + [f1] Then
Cells(Wf, 1).Resize(, 3).Copy Destination:=[f65432].End(xlUp).Offset(1)
Cells([f65432].End(xlUp).Row, "I") = Wf
End If
End Select
Next Wf
End Sub