我试图将来自其他帖子的代码改编为更易于理解的代码。在运行代码时,我仍然收到此行的“类型不匹配”错误:w(k) = z(i, 1)
。有没有人有任何洞察到这个错误?为MAXIFs创建VBA代码
我的代码
Option Base 1
Function MaxIf(MaxRange As Range, Lookup_Range1 As Range, Var_Range1 As Variant, _
Lookup_Range2 As Range, Var_Range2 As Variant) As Variant
Dim x() As Variant, y() As Variant, z() As Variant, w() As Long
Dim i As Long
Dim Constraint1 As Variant, Constraint2 As Variant, k As Long
i = 1
k = 0
Constraint1 = Var_Range1
Constraint2 = Var_Range2
x = Lookup_Range1
y = Lookup_Range2
z = MaxRange
For i = 1 To Lookup_Range1.Rows.Count
If x(i, 1) = Var_Range1 Then
If y(i, 1) = Var_Range2 Then
k = k + 1
ReDim Preserve w(k)
w(k) = z(i, 1)
End If
End If
Next i
MaxIf = Application.Max(w)
End Function
当你得到错误时'z(i,1)'的值是多少?我的猜测是它包含一个'String',一个错误或其他一些不能隐式转换为'Long'的数据类型。您可以通过在错误行上方添加'Debug.Assert IsNumeric(z(i,1))'行来检查。 – Comintern
@Diedrich尝试解释你想要你的'Function'做什么?也许添加工作表的屏幕截图以及预期的结果。 –
我认为你正试图获得在其他列中的相应单元格符合某些标准的范围内的最大值。你可以通过一个简单的公式,例如MAX( - (Range1 = Criteria1)* - (Range2 = Criteria2)* MaxRange) '最大( - (A1:A15 =“约翰”)* - (B1:B15 = 20)* C1:C15)' – nightcrawler23