Private Sub Worksheet_Change(ByVal Target As Range)
Dim rowTracking&, nCount&, rowCount&
Dim TrackNo As Range, cellTrack As Range, cellNumber As Range
Dim rngTrackingList As Range, TrackingFound As Range, NumberFound As Range
Dim rngAC As Range, rngNumber As Range, rngInput As Range, rngHeader As Range
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ActiveWorkbook.Sheets("InputData")
Set ws2 = ActiveWorkbook.Sheets("Sheet2")
Set rngAC = ws1.Range("A:C")
Set rngNumber = ws2.Range("A2", "I16")
Set rngTrackingList = ws2.Range("K2", "K" & ws2.Cells(ws2.Rows.Count, "K").End(xlUp).Row)
Application.ScreenUpdating = False
rngTrackingList.ClearContents
On Error Resume Next
If Not Intersect(Target, rngAC) Then
If Application.WorksheetFunction.CountA(ws1.Range("A" & Target.Row, "C" & Target.Row)) = 3 Then
Set rngInput = ws1.Range("A2", "A" & ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row + 1)
Set rngTrackingList = ws2.Range("K2", "K" & ws2.Cells(ws2.Rows.Count, "K").End(xlUp).Row + 1)
Set TrackingFound = rngTrackingList.Find(TrackNo.Value2)
rngNumber.Interior.Color = xlNone
rowCount = ws2.Cells(ws2.Rows.Count, "M").End(xlUp).Row
ws2.Range("M2", "N" & rowCount + 1).ClearContents
For Each TrackNo In rngInput
Set TrackingFound = rngTrackingList.Find(TrackNo.Value2)
If TrackingFound Is Nothing Then
ws2.Range("K" & ws2.Cells(ws2.Rows.Count, "K").End(xlUp).Row + 1) = TrackNo.Value2
Set rngTrackingList = ws2.Range("K2", "K" & ws2.Cells(ws2.Rows.Count, "K").End(xlUp).Row + 1)
End If
Next
Set rngTrackingList = ws2.Range("K2", "K" & ws2.Cells(ws2.Rows.Count, "K").End(xlUp).Row)
For Each TrackNo In rngInput
Set TrackingFound = rngTrackingList.Find(TrackNo.Value2)
For Each cellTrack In rngTrackingList
For Each cellNumber In rngNumber
If cellNumber = TrackNo.Offset(0, 1) Then
cellNumber.Interior.Color = TrackingFound.Interior.Color
End If
Next
Next
Next
End If
Set rngNumber = ws1.Range("B2", ws1.Cells(ws1.Rows.Count, "B").End(xlUp))
For Each cellNumber In rngNumber
Set rngHeader = ws2.Range("M2", "M" & ws2.Cells(ws2.Rows.Count, "M").End(xlUp).Row + 1)
Set NumberFound = rngHeader.Find(cellNumber.Value2)
If NumberFound Is Nothing Then
nCount = Application.WorksheetFunction.CountIf(rngNumber, CStr(cellNumber))
If nCount > 1 Then
rowCount = ws2.Cells(ws2.Rows.Count, "M").End(xlUp).Row + 1
ws2.Range("M" & rowCount) = cellNumber.Value2
ws2.Range("N" & rowCount) = nCount
End If
End If
Next
End If
End Sub