Option Explicit 'Yêu cầu các biến cần xài phải được khai báo'
Private Sub CommandButton1_Click() 'Macro của nút nhấn'
' 3 dòng tiếp sau là khai báo những biến cần dùng'
Dim Rng As Range, sRng As Range, Clls As Range
Dim cRng As Range, Rng1 As Range: Dim Khong As Boolean
Dim MyAdd As String: Dim Rw As Long, jJ As Byte, Cot As Byte, TAM As Byte
Set cRng = Selection: Set Rng1 = cRng.Cells(1, 1)
'Dòng lệnh phần đầu: Gán vùng đã chọn vô biến;
Dòng sau: Gán ô đầu tiên chứa trong biến vô 1 biến đối tượng Range khác:'
Rw = cRng.Row: Cot = cRng.Columns.Count
'Phần đầu: Lấy số dòng trong biến gán vô biến Rw;
Phần sau: Số cột của vùng chứa trong biến này được gán vô biến Cot:'
Set Rng = Range(Cells(Rw, "A"), Cells(Rw, Cells(Rw, "iV").End(xlToLeft).Column))
'Đem các ô có dữ liệu của vùng đã chọn (cùng hàng) gán vô biến đối tượng có tên là Rng:'
Set Rng = Cells(Rw, "A").Resize(, Rng.Columns.Count + Cot)
' Mở rọng vùng đang gán trong biến Rng thêm một số cột = với số cột ta đã chọn từ đầu:'
' Để tránh sai sót khi tìm kiếm bên dưới'
Rng.Interior.ColorIndex = 0 'Xóa hết màu nền trong vùng có trong biến Rng'
'Thực hiện phương thức tìm trong Rng các vùng có thể có trùng với vùng chọn:'
Set sRng = Rng.Find(Rng1.Value, Rng1, xlFormulas, xlWhole)
' 2 dòng kế tiếp: Nếu không tìm thấy thì đưa ra câu cảnh báo:'
If sRng Is Nothing Then
MsgBox "Khong Có Vùng Giong Vay Trong Hàng"
' Còn tìm thấy thì thực hiện các lệnh tiếp theo:'
Else
' Gán địa chỉ ô tìm thấy vô biến MyAdd' 'Chú ý: Đọc từ phải sang dễ hiểu dòng lệnh hơn'
MyAdd = sRng.Address
'Thiết lập vòng lặp xử lý cho các lần tìm thấy:'
Do
'Thiết lập vòng lặp For . . .Next để duyệt tất các ô trong vùng chọn:'
For Each Clls In cRng
'Điều kiện là: Nếu từng ô trong vùng chọn có dữ liệu trùng với dữ liệu của các ô mà ô đầu tiên l2 ô tìm thấy & tương ứng tiếp theo thì:'
If Clls.Value <> sRng.Offset(, jJ).Value Then
' Biến Yes/No được thiết lập := True:'
Khong = Not Khong
'3 dòng kế tiếp đó là: gán Jj=0 & thoát khỏi vòng lặp tức thì & kết thúc viếc xét điều kiện'
jJ = 0
Exit For
End If
'2 dòng kế tiếp:Tăng trị trong biến Jj 1 đơn vị & lấy nó gán vô biến TAM đã khai báo:'
jJ = jJ + 1
TAM = jJ
Next Clls 'Kết thúc vòng lặp For. . . '
If TAM = Cot Then ' Điều kiện nếu trị trong TAM = trị trong Jj thì thực thi 2 lệnh tiếp:'
'Tô màu cho vùng tìm thấy'
sRng.Resize(, Cot).Interior.ColorIndex = 35 + Rw Mod 6
jJ = 0 ' Gán trị cho biến dùng trong vòng lặp'
End If
' Thực hiện phương thức tìm tiếp các ô thỏa điều kiện trong hàng:'
Set sRng = Rng.FindNext(sRng)
'Thoát vòng lặp Do. . .Loop khi thỏa các điều kiện này:'
Loop While sRng.Address <> MyAdd
End If
End Sub