So sánh các phạm vi trong Excel VBA
Tình huống:
Lưu ý: giá trị duy nhất duy nhất trong ví dụ này là 3 vì tất cả các giá trị khác xuất hiện trong ít nhất một khu vực khác. Để chọn Phạm vi (“B2: B7, D3: E6, D8: E9”), giữ Ctrl và chọn từng khu vực.
Đặt một nút lệnh trên trang tính của bạn và thêm các dòng mã sau:
-
Đầu tiên, chúng ta khai báo bốn đối tượng Range và hai biến kiểu Integer.
Dim rangeToUse As Range, singleArea As Range, cell1 As Range, cell2 As Range, i As Integer, j As Integer
-
Chúng tôi khởi tạo phạm vi đối tượng RangeToUse với phạm vi đã chọn.
Set rangeToUse = Selection
-
Thêm dòng thay đổi màu nền của tất cả các ô thành ‘No Fill’. Cũng thêm dòng xóa đường viền của tất cả các ô.
Cells.Interior.ColorIndex = 0 Cells.Borders.LineStyle = xlNone
-
Thông báo cho người dùng khi họ chỉ chọn một khu vực.
If Selection.Areas.Count <= 1 Then MsgBox "Please select more than one area." Else End If
Các dòng mã tiếp theo (tại 5, 6 và 7) phải được thêm vào giữa Else và End If.
-
Tô màu các ô của các vùng đã chọn.
rangeToUse.Interior.ColorIndex = 38
-
Biên giới từng khu vực.
For Each singleArea In rangeToUse.Areas singleArea.BorderAround ColorIndex:=1, Weight:=xlThin Next singleArea
-
Phần còn lại của chương trình này trông như sau.
For i = 1 To rangeToUse.Areas.Count For j = i + 1 To rangeToUse.Areas.Count For Each cell1 In rangeToUse.Areas(i) For Each cell2 In rangeToUse.Areas(j) If cell1.Value = cell2.Value Then cell1.Interior.ColorIndex = 0 cell2.Interior.ColorIndex = 0 End If Next cell2 Next cell1 Next j Next i
Giải thích: điều này có vẻ hơi choáng ngợp, nhưng không khó lắm đâu. rangeToUse.Areas.Count bằng 3, vì vậy hai dòng mã đầu tiên giảm xuống For i = 1 to 3 và For j = i + 1 to 3. Với i = 1, j = 2, Excel VBA so sánh tất cả các giá trị của vùng đầu tiên với tất cả các giá trị của vùng thứ hai. Đối với i = 1, j = 3, Excel VBA so sánh tất cả các giá trị của vùng đầu tiên với tất cả các giá trị của vùng thứ ba. Với i = 2, j = 3, Excel VBA so sánh tất cả các giá trị của vùng thứ hai với tất cả các giá trị của vùng thứ ba. Nếu các giá trị giống nhau, nó sẽ đặt màu nền của cả hai ô thành ‘No Fill’, vì chúng không phải là duy nhất.
Kết quả khi bạn bấm vào nút lệnh trên sheet: