【发布时间】:2017-04-23 05:26:20
【问题描述】:
我尝试将另一篇文章中的代码改编成更易于理解的内容。运行代码时,我仍然收到此行的错误“类型不匹配”:w(k) = z(i, 1)。有没有人对此错误有任何见解?
我的代码
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))来检查。 -
@Diedrich 尝试解释您希望您的
Function做什么?也许添加一个工作表的屏幕截图以及预期的结果。 -
我认为当其他列中的相应单元格符合某些条件时,您正在尝试获取某个范围内的最大值。您可以通过像
MAX(--(Range1 = Criteria1) * -(Range2=Criteria2) * MaxRange)这样的简单公式来实现这一点,例如Max(--(A1:A15 = "John") * --(B1:B15=20) * C1:C15)