Tình huống:

Compare Ranges in Excel VBA

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:

  1. Đầ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
  1. 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
  1. 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
  1. 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.

  1. Tô màu các ô của các vùng đã chọn.

rangeToUse.Interior.ColorIndex = 38
  1. Biên giới từng khu vực.

For Each singleArea In rangeToUse.Areas

singleArea.BorderAround ColorIndex:=1, Weight:=xlThin

Next singleArea
  1. 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:

Compare Ranges Result