Hi There.
Here is a slightly different approach as there will be many ways to achieve this.
I am also assuming that your data runs from columns A to E and starts at row 2.
This code uses the find function and should avoid a second loop. It will also cut new entries from sheet2 and paste them at the bottom of sheet1.
I am not sure but there seems to be a few errors in your example data, this made it a bit tricky to check what you need.
Going on your text this code should do the trick.
Sub UpdateData()
Dim rCell As Range, fRange As String
On Error Resume Next
For Each rCell In Sheet2.Range("C2:C" & Sheet2.Range("C" & Rows.Count).End(xlUp).Row).Cells
'Adds missing entries
If WorksheetFunction.CountIf(Sheet1.Range("C:C"), rCell.Value) < 1 Then
'Cut the data from sheet 2
Sheet2.Range(rCell.Offset(, -2), rCell.Offset(, 2)).Cut _
Sheet1.Range("A" & Sheet1.Range("A" & Rows.Count).End(xlUp).Row + 1)
End If
'Update data to existing entries
fRange = Sheet1.Range("C:C").Find(What:=rCell.Value, After:=Sheet1.Range("C1"), LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True _
, SearchFormat:=False).Address
If rCell.Offset(, -2).Value <> "" Then Sheet1.Range(fRange).Offset(, -2).Value = rCell.Offset(, -2).Value 'Forename
If rCell.Offset(, -1).Value <> "" Then Sheet1.Range(fRange).Offset(, -1).Value = rCell.Offset(, -1).Value 'Surname
If rCell.Offset(, 1).Value <> "" Then Sheet1.Range(fRange).Offset(, 1).Value = rCell.Offset(, 1).Value 'Status
If rCell.Offset(, 2).Value <> "" Then Sheet1.Range(fRange).Offset(, 2).Value = rCell.Offset(, 2).Value 'Note
Next rCell
End Sub
Hope this helps
George