Hi
See how this goes for a start.
Make sure you are on the Unordered Names sheet when you run it.
Sub aaa()
'AUTHOR: rylo
'DATE: 21/9/07
'REFERENCE: http://www.excelforum.com/showthread.php?t=615533
Dim rngKnown As Range
Set rngKnown = Sheets("Known Current Employees").Range("A:C")
'process all single entry surnames
For Each ce In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
If WorksheetFunction.CountIf(rngKnown, ce.Value) = 1 Then
Set findit = rngKnown.Find(what:=ce.Value, lookat:=xlWhole)
If findit.Column = 3 Then 'Cells(ce.Row, "G").Value = ce.Value
holder = ""
On Error Resume Next
holder = WorksheetFunction.Match(ce.Offset(0, 1).Value, findit.EntireRow, 0)
On Error GoTo 0
If holder <> "" Then
Cells(ce.Row, "G").Value = ce.Value
Cells(ce.Row, "D").Offset(0, holder).Value = ce.Offset(0, 1).Value
If Not IsEmpty(ce.Offset(0, 2)) Then
Cells(ce.Row, "D").Offset(0, 3 - holder).Value = ce.Offset(0, 2).Value
End If
End If
End If
End If
Next ce
'process multi entry surnames
For Each ce In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
If WorksheetFunction.CountIf(rngKnown, ce.Value) > 1 Then
'Debug.Assert ce.Value <> "Sutton"
Set findit = rngKnown.Find(what:=ce.Value, lookat:=xlWhole)
firstadd = findit.Address
foundit = False
Do
holder = ""
On Error Resume Next
holder = WorksheetFunction.Match(ce.Offset(0, 1).Value, findit.EntireRow, 0)
On Error GoTo 0
If holder <> "" Then
Cells(ce.Row, "G").Value = ce.Value
Cells(ce.Row, "D").Offset(0, holder).Value = ce.Offset(0, 1).Value
foundit = True
If Not IsEmpty(ce.Offset(0, 2)) Then
Cells(ce.Row, "D").Offset(0, 3 - holder).Value = ce.Offset(0, 2).Value
End If
End If
Set findit = rngKnown.Find(what:=ce.Value, lookat:=xlWhole, after:=findit)
Loop Until findit.Address = firstadd Or foundit
End If
Next ce
End Sub
rylo
Bookmarks