Here is a closer look at how the search works.


'Basic with statement
With SearchRange
'This line sets the range Cel to the cell where our
'matching value is found.
'What:= what we are searching for.
'LookIn:= Either xlValues or xlFormulas depending on
'what we are seaching in.
'LookAt:= Either xlWhole to match the whole cell, or
'xlPart to match part of the cell.
Set Cel = .Find(What:=Range("B" & i).Text, LookIn:=xlValues, _
    LookAt:=xlWhole, MatchCase:=True)
'If there is no match the Cel would be nothing so we
'check with an If statement.
If Not Cel Is Nothing Then
'We store the address of Cel for later use since we don't
'want to infinitely search.
FirstAddress = Cel.Address
'Start of a Do...Loop loop.
        Do
'We already matched Range("B" & i).Text so we need
'to check if the next cell over
'matches Range ("D" & i).Text. We also want to check
'if the value in Column D corresponding to where Cel
'was found is equal to 0.
If Cel.Offset(0, 1).Text = Range("D" & i).Text And _
            Sheets("Class 2").Range("D" & Cel.Row) = 0 Then
'True part of the If statement. This puts the value Above
'in Range("L" & i).
Range("L" & i).Value = "Above"
'Exit the Do...Loop loop since we only need one match.
                Exit Do
            End If
In case we matched Range("B" & i).Text but not
'Range("D" & i).Text we need to find the next matching value.
Set Cel = .FindNext(Cel)
'This will loop through all the matching values of our search.
'If Cel is nothing then there are no matches.
'If Cel.Address = FirstAddress then we found all the cells and
'would now start over. In either case the loop ends.
Loop While Not Cel Is Nothing And Cel.Address <> FirstAddress
    End If
End With