Find first cell with a value in row or column
Function FindRangeWithString(rngStart As Range, _
varSearch As Variant, _
bHorizontal As Boolean, _
Optional bxlPart As Boolean = True) As Range
'Tested on:
'- date, integer, string
'- horizontal, vertical search
'ToDo: forward, backward, both
'?FindRangeWithString(Worksheets("PriceFreeFC").Range("b2"), #1/31/2004#, bHorizontal:=False, bxlPart:=False).Address
'?FindRangeWithString(worksheets("PriceFreeFC").Range("b2"), 18.86 , bHorizontal:=False, bxlPart:=False).Address
'?FindRangeWithString(worksheets("Forecast").Range("b1"), "B2B Utrecht forecast [MW]" , bHorizontal:=True, bxlPart:=False).Address
'?FindRangeWithString(worksheets("Forecast").Range("b1"), "B2B Utrecht forecast [MW]" , bHorizontal:=True, bxlPart:=False).Address
Dim ixlPart As Byte
Dim FindRange As Range
Dim cel As Range
If rngStart.Value = varSearch Then Set FindRangeWithString = rngStart: Exit Function
With rngStart
If bHorizontal = True Then
Set FindRange = .Worksheet.Rows(.Row)
Else
Set FindRange = .Worksheet.Columns(.Column)
End If
End With
If IsDate(varSearch) = False Then
If bxlPart = True Then
ixlPart = xlPart
Else
ixlPart = xlWhole
End If
Set FindRangeWithString = FindRange.Find(varSearch, After:=rngStart, LookIn:=xlValues, lookat:=ixlPart)
Else 'date
For Each cel In FindRange.Cells
If cel.Value = varSearch Then
Set FindRangeWithString = cel
Exit For
End If
Next
End If
End Function