How about this:
Function ThreeParameterHLookup(Data_Range As Range, RowNum As Long, Parameter1 As Variant, _
Parameter2 As Variant, Parameter3 As Variant) As Variant
'Declare Variables
Dim Cell
Dim Current_Col As Long
Dim No_Of_Rows_in_Range As Long
Dim No_of_Cols_in_Range As Long
Dim Matching_Col As Long
'set answer to N/A by default
ThreeParameterHLookup = CVErr(xlErrNA)
Matching_Col = 0
Current_Col = 1
No_Of_Rows_in_Range = Data_Range.Rows.Count
No_of_Cols_in_Range = Data_Range.Columns.Count
'Check if Col is greater than number of columns in range
If (RowNum > No_Of_Rows_in_Range) Then
ThreeParameterHLookup = CVErr(xlErrRef)
Else
Do
If ((Data_Range.Cells(1, Current_Col).Value = Parameter1) And _
(Data_Range.Cells(2, Current_Col).Value = Parameter2) And _
(Data_Range.Cells(3, Current_Col).Value = Parameter3)) Then
Matching_Col = Current_Col
End If
Current_Col = Current_Col + 1
Loop Until ((Current_Col = No_of_Cols_in_Range) Or (Matching_Col <> 0))
If Matching_Col <> 0 Then
ThreeParameterHLookup = Data_Range.Cells(RowNum, Matching_Col)
End If
End If
End Function