Chào cả nhà! Em có một file excel tổng hợp từng ngày, mỗi sheet gồm 2 cột CODE và NAME.

Em muốn tô màu những hàng mà chứa CODE giống nhau ở tất cả các sheet. Nếu copy về cùng 1 sheet thì đơn giản nhưng vấn đề là em không được thay đổi dữ liệu trong từng sheet và số lượng sheet tăng lên liên tục có lúc lên đến 40 sheet (em chỉ gởi file đã đơn giản hóa) và em cần đánh dấu lại để kiểm soát những CODE trùng. Nếu làm bằng tay thì rất mất thời gian số lượng dữ liệu này nên em nghĩ dùng VBA là hợp lý nhất nhưng loay hoay hoài chưa tạo được mã ưng ý. VD như code ở dưới thì tô màu được các dữ liệu trùng, nhưng nếu phát sinh thêm sheet thì không tự cập nhật được, đồng thời phải thêm tên sheet mới vào mục Const shtNames As String
. Mong anh em hỗ trợ giúp em bài này!
Em muốn tô màu những hàng mà chứa CODE giống nhau ở tất cả các sheet. Nếu copy về cùng 1 sheet thì đơn giản nhưng vấn đề là em không được thay đổi dữ liệu trong từng sheet và số lượng sheet tăng lên liên tục có lúc lên đến 40 sheet (em chỉ gởi file đã đơn giản hóa) và em cần đánh dấu lại để kiểm soát những CODE trùng. Nếu làm bằng tay thì rất mất thời gian số lượng dữ liệu này nên em nghĩ dùng VBA là hợp lý nhất nhưng loay hoay hoài chưa tạo được mã ưng ý. VD như code ở dưới thì tô màu được các dữ liệu trùng, nhưng nếu phát sinh thêm sheet thì không tự cập nhật được, đồng thời phải thêm tên sheet mới vào mục Const shtNames As String
Mã:
Sub HighlightDuplicates()
Const shtNames As String = "23,24,25,26"
Const DupCells As String = "a2:a500"
Dim ws() As String: ws = Split(shtNames, ",")
Dim i As Integer, j As Integer
Dim CheckCell As Range, rngFound As Range
For i = 0 To UBound(ws)
Sheets(ws(i)).Range(DupCells).Interior.ColorIndex = 0
Next i
For i = 0 To UBound(ws)
For Each CheckCell In Sheets(ws(i)).Range(DupCells)
If CheckCell.Interior.ColorIndex <> 3 Then
For j = 0 To UBound(ws)
For Each rngFound In Sheets(ws(j)).Range(DupCells)
If j = i Then
If CheckCell.Address <> rngFound.Address _
And LCase(Trim(rngFound.Value)) = LCase(Trim(CheckCell.Value)) Then
CheckCell.Interior.ColorIndex = 3
rngFound.Interior.ColorIndex = 3
End If
ElseIf LCase(Trim(rngFound.Value)) = LCase(Trim(CheckCell.Value)) Then
CheckCell.Interior.ColorIndex = 3
rngFound.Interior.ColorIndex = 3
End If
Next rngFound
Next j
End If
Next CheckCell
Next i
End Sub


