Sub TAB_WFD()
'
Dim DuplicateFound As Boolean
Dim TempValue As Currency
Dim TempDATE As Date
Dim ArrayColumn As Long, ArrayRow As Long, CheckForDuplicateRow As Long, FinalArrayRow As Long
Dim TAB_Count As Long, WFD_Count As Long
Dim TempMC_NO As Long, TempNLC As Long
Dim OriginalTAB_Array As Variant, OriginalWFD_Array As Variant
'
OriginalTAB_Array = Sheets("TAB").Range("A2:E" & Sheets("TAB").Range("A" & Rows.Count).End(xlUp).Row) ' Save data from 'TAB' sheet into OriginalTAB_Array
OriginalWFD_Array = Sheets("WFD").Range("A2:E" & Sheets("WFD").Range("A" & Rows.Count).End(xlUp).Row) ' Save data from 'WFD' sheet into OriginalWFD_Array
'
' Find any duplicates in OriginalTAB_Array
For CheckForDuplicateRow = 1 To UBound(OriginalTAB_Array, 1) - 1 ' Loop through all rows of OriginalTAB_Array - 1
TempNLC = OriginalTAB_Array(CheckForDuplicateRow, 1) ' Save value from first column of OriginalTAB_Array into TempNLC
TempMC_NO = OriginalTAB_Array(CheckForDuplicateRow, 2) ' Save value from second column of OriginalTAB_Array into TempMC_NO
TempDATE = OriginalTAB_Array(CheckForDuplicateRow, 3) ' Save value from third column of OriginalTAB_Array into TempDATE
TempValue = OriginalTAB_Array(CheckForDuplicateRow, 4) ' Save value from fourth column of OriginalTAB_Array into TempValue
'
For ArrayRow = CheckForDuplicateRow + 1 To UBound(OriginalTAB_Array, 1) ' Loop through lower rows of OriginalTAB_Array
If OriginalTAB_Array(ArrayRow, 5) = vbNullString Then ' If last column in OriginalTAB_Array is blank then ...
If OriginalTAB_Array(ArrayRow, 1) = TempNLC Then ' If first column = TempNLC then ...
If OriginalTAB_Array(ArrayRow, 2) = TempMC_NO Then ' If second column = TempMC_NO then ...
If OriginalTAB_Array(ArrayRow, 3) = TempDATE Then ' If third column = TempDATE then ...
If OriginalTAB_Array(ArrayRow, 4) = TempValue Then ' If fourth column = TempValue then
OriginalTAB_Array(CheckForDuplicateRow, 5) = "DUPLICATE" ' We have found a match, set 5th column to 'DUPLICATE'
OriginalTAB_Array(ArrayRow, 5) = "DUPLICATE" ' We have found a match, set 5th column to 'DUPLICATE'
End If
End If
End If
End If
End If
Next ' Loop back
Next ' Loop back
'
'-------------------------------------------------------------------------------------------------------------------
'
' Find any duplicates in OriginalWFD_Array
For CheckForDuplicateRow = 1 To UBound(OriginalWFD_Array, 1) - 1 ' Loop through all rows of OriginalWFD_Array - 1
TempNLC = OriginalWFD_Array(CheckForDuplicateRow, 1) ' Save value from first column of OriginalWFD_Array into TempNLC
TempMC_NO = OriginalWFD_Array(CheckForDuplicateRow, 2) ' Save value from second column of OriginalWFD_Array into TempMC_NO
TempDATE = OriginalWFD_Array(CheckForDuplicateRow, 3) ' Save value from third column of OriginalWFD_Array into TempDATE
TempValue = OriginalWFD_Array(CheckForDuplicateRow, 4) ' Save value from fourth column of OriginalWFD_Array into TempValue
'
For ArrayRow = CheckForDuplicateRow + 1 To UBound(OriginalWFD_Array, 1) ' Loop through lower rows of OriginalWFD_Array
If OriginalWFD_Array(ArrayRow, 5) = vbNullString Then ' If last column in OriginalWFD_Array is blank then ...
If OriginalWFD_Array(ArrayRow, 1) = TempNLC Then ' If first column = TempNLC then ...
If OriginalWFD_Array(ArrayRow, 2) = TempMC_NO Then ' If second column = TempMC_NO then ...
If OriginalWFD_Array(ArrayRow, 3) = TempDATE Then ' If third column = TempDATE then ...
If OriginalWFD_Array(ArrayRow, 4) = TempValue Then ' If fourth column = TempValue then
OriginalWFD_Array(CheckForDuplicateRow, 5) = "DUPLICATE" ' We have found a match, set 5th column to 'DUPLICATE'
OriginalWFD_Array(ArrayRow, 5) = "DUPLICATE" ' We have found a match, set 5th column to 'DUPLICATE'
End If
End If
End If
End If
End If
Next ' Loop back
Next ' Loop back
'
'--------------------------------------------------------------------------------------------------------------------
'
' Delete same entries in both sheets
For CheckForDuplicateRow = 1 To UBound(OriginalTAB_Array, 1) ' Loop through all rows of OriginalTAB_Array
TempNLC = OriginalTAB_Array(CheckForDuplicateRow, 1) ' Save value from first column of OriginalTAB_Array into TempNLC
TempMC_NO = OriginalTAB_Array(CheckForDuplicateRow, 2) ' Save value from second column of OriginalTAB_Array into TempMC_NO
TempDATE = OriginalTAB_Array(CheckForDuplicateRow, 3) ' Save value from third column of OriginalTAB_Array into TempDATE
TempValue = OriginalTAB_Array(CheckForDuplicateRow, 4) ' Save value from fourth column of OriginalTAB_Array into TempValue
DuplicateFound = False ' Set DuplicateFound = False
'
For ArrayRow = 1 To UBound(OriginalWFD_Array, 1) ' Loop through all rows of OriginalWFD_Array
If OriginalWFD_Array(ArrayRow, 1) <> vbNullString Then ' If first column in OriginalWFD_Array is NOT blank then ...
If OriginalWFD_Array(ArrayRow, 1) = TempNLC Then ' If first column = TempNLC then ...
If OriginalWFD_Array(ArrayRow, 2) = TempMC_NO Then ' If second column = TempMC_NO then ...
If OriginalWFD_Array(ArrayRow, 3) = TempDATE Then ' If third column = TempDATE then ...
If OriginalWFD_Array(ArrayRow, 4) = TempValue Then ' If fourth column = TempValue then
OriginalWFD_Array(ArrayRow, 1) = vbNullString ' We found a match so set first column to blank
OriginalTAB_Array(CheckForDuplicateRow, 1) = vbNullString ' We found a match so set first column to blank
DuplicateFound = True ' Set DuplicateFound = True
Exit For ' Exit this For Loop
End If
End If
End If
End If
End If
Next ' Loop back
'
If DuplicateFound = False Then OriginalTAB_Array(CheckForDuplicateRow, 5) = "MISSING" ' If a Duplicate was NOT found then set column 5 = 'MISSING'
Next ' Loop back
'
'-------------------------------------------------------------------------------------------------------------------
'
' Find number of remaining entries in each array
For ArrayRow = 1 To UBound(OriginalTAB_Array, 1) ' Loop through all rows of OriginalTAB_Array
If OriginalTAB_Array(ArrayRow, 1) <> vbNullString Then TAB_Count = TAB_Count + 1 ' If first column is NOT blank then Increment TAB_Count
Next ' Loop back
'
For ArrayRow = 1 To UBound(OriginalWFD_Array, 1) ' Loop through all rows of OriginalWFD_Array
If OriginalWFD_Array(ArrayRow, 1) <> vbNullString Then WFD_Count = WFD_Count + 1 ' If first column is NOT blank then Increment WFD_Count
Next ' Loop back
'
ReDim FinalTAB_Array(1 To TAB_Count, 1 To 5) As Variant ' Set number of rows & columns for FinalTAB_Array
ReDim FinalWFD_Array(1 To WFD_Count, 1 To 5) As Variant ' Set number of rows & columns for FinalWFD_Array
'
For ArrayRow = 1 To UBound(OriginalTAB_Array, 1) ' Loop through all rows of OriginalTAB_Array
If OriginalTAB_Array(ArrayRow, 1) <> vbNullString Then ' If first column is NOT blank then ...
FinalArrayRow = FinalArrayRow + 1 ' Increment FinalArrayRow
'
FinalTAB_Array(FinalArrayRow, 1) = OriginalTAB_Array(ArrayRow, 1) ' Save First column into First column of FinalTAB_Array
FinalTAB_Array(FinalArrayRow, 2) = OriginalTAB_Array(ArrayRow, 2) ' Save Second column into Second column of FinalTAB_Array
FinalTAB_Array(FinalArrayRow, 3) = OriginalTAB_Array(ArrayRow, 3) ' Save Third column into Third column of FinalTAB_Array
FinalTAB_Array(FinalArrayRow, 4) = OriginalTAB_Array(ArrayRow, 4) ' Save Fourth column into Fourth column of FinalTAB_Array
FinalTAB_Array(FinalArrayRow, 5) = OriginalTAB_Array(ArrayRow, 5) ' Save Fifth column into Fifth column of FinalTAB_Array
End If
Next ' Loop back
'
FinalArrayRow = 0 ' Reset FinalArrayRow back to zero
'
For ArrayRow = 1 To UBound(OriginalWFD_Array, 1) ' Loop through all rows of OriginalWFD_Array
If OriginalWFD_Array(ArrayRow, 1) <> vbNullString Then ' If first column is NOT blank then ...
FinalArrayRow = FinalArrayRow + 1 ' Increment FinalArrayRow
'
FinalWFD_Array(FinalArrayRow, 1) = OriginalWFD_Array(ArrayRow, 1) ' Save First column into First column of FinalWFD_Array
FinalWFD_Array(FinalArrayRow, 2) = OriginalWFD_Array(ArrayRow, 2) ' Save Second column into Second column of FinalWFD_Array
FinalWFD_Array(FinalArrayRow, 3) = OriginalWFD_Array(ArrayRow, 3) ' Save Third column into Third column of FinalWFD_Array
FinalWFD_Array(FinalArrayRow, 4) = OriginalWFD_Array(ArrayRow, 4) ' Save Fourth column into Fourth column of FinalWFD_Array
FinalWFD_Array(FinalArrayRow, 5) = OriginalWFD_Array(ArrayRow, 5) ' Save Fifth column into Fifth column of FinalWFD_Array
End If
Next ' Loop back
'
Sheets("TAB").Range("G2").Resize(UBound(FinalTAB_Array, 1), UBound(FinalTAB_Array, 2)) = FinalTAB_Array ' Display FinalTAB_Array to 'TAB' sheet
Sheets("WFD").Range("G2").Resize(UBound(FinalWFD_Array, 1), UBound(FinalWFD_Array, 2)) = FinalWFD_Array ' Display FinalWFD_Array to 'WFD' sheet
'
Sheets("TAB").Range("J:J").NumberFormat = """£""#,##0.00;[Red]-""£""#,##0.00" ' Format the currency column in 'TAB' sheet
Sheets("WFD").Range("J:J").NumberFormat = """£""#,##0.00;[Red]-""£""#,##0.00" ' Format the currency column in 'WFD' sheet
'
Sheets("TAB").UsedRange.EntireColumn.AutoFit ' Autofit the columns in the 'TAB' sheet
Sheets("WFD").UsedRange.EntireColumn.AutoFit ' Autofit the columns in the 'WFD' sheet
End Sub