The call was wrong, parameters out of order and AL5 instead of AL2
Call MinValues(Range("BF2"), "Maintenance", Range("C2"), Range("C2"), Range("AL5"), Range("AG2"))/
Now that I had some real data to look at, I could simplify the calling sequence, and use more meaningful variable names
Try this version, but format BF as 'Date' in number formatting
Option Explicit
Sub test2()
Call MinValues(Range("BF2"), "Maintenance", Range("C2"), Range("AG2"), Range("T2"))
End Sub
Public Sub MinValues( _
rGrandStartDates As Range, _
sServiceDescription As String, _
rContracts As Range, _
rServiceDescriptions As Range, _
rStartDates As Range)
Dim lastrow As Long
Dim sFormula As String
Dim rContract As Range
With ActiveSheet
lastrow = .Cells(.Rows.Count, rStartDates.Column).End(xlUp).Row
Set rGrandStartDates = rGrandStartDates.Resize(lastrow - rGrandStartDates.Row + 1)
Set rContracts = rContracts.Resize(lastrow - rContracts.Row + 1)
Set rContract = rContracts.Cells(1, 1)
Set rServiceDescriptions = rServiceDescriptions.Resize(lastrow - rServiceDescriptions.Row + 1)
Set rStartDates = rStartDates.Resize(lastrow - rStartDates.Row + 1)
sFormula = "=MIN(IF(" & rContracts.Address(True, True) & _
"=" & rContract.Address(False, True) & _
",IF(" & rServiceDescriptions.Address(True, True) & _
"=""" & sServiceDescription & """," & _
rStartDates.Address(True, True) & _
")))"
rGrandStartDates.Cells(1, 1).FormulaArray = sFormula
rGrandStartDates.Cells(1, 1).AutoFill Destination:=rGrandStartDates, Type:=xlFillDefault
rGrandStartDates.Value = rGrandStartDates.Value
End With
End Sub