If you are going to run this code for large data set then you may try Array instead of range to process data. That way it will be shade faster for smaller data and considerably faster with large data.
Public Sub RunWallaceCode()
Dim varRng As Variant
Dim objDic As Object
Dim i As Long
varRng = Range("A2:C" & Range("B" & Rows.Count).End(xlUp).Row).Value
Set objDic = CreateObject("Scripting.Dictionary")
With objDic
.comparemode = vbTextCompare
For i = LBound(varRng) To UBound(varRng)
If Not .exists(varRng(i, 2)) Then
.Add varRng(i, 2), varRng(i, 1)
Else
If .Item(varRng(i, 2)) <> varRng(i, 1) Then _
.Item(varRng(i, 2)) = .Item(varRng(i, 2)) & "|" & varRng(i, 1)
End If
Next I
For i = LBound(varRng) To UBound(varRng)
If InStr(.Item(varRng(i, 2)), "|") > 0 Then
varRng(i, 3) = "mixed"
Else
varRng(i, 3) = varRng(i, 1)
End If
Next i
End With
Range("A2").Resize(UBound(varRng), 3) = varRng
End Sub