Я попытался адаптировать код из другого сообщения во что-то более легкое для понимания. При запуске кода я все равно получаю сообщение об ошибке «Тип несоответствия» для этой строки: w(k) = z(i, 1)
. Кто-нибудь имеет представление об этой ошибке?Создать код VBA для MAXifs
Моего код
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 попытается объяснить, что вы хотите от своей 'функции'? Возможно, добавьте экранный снимок рабочего листа и каков ожидаемый результат. –
Я думаю, вы пытаетесь получить max в диапазоне, когда соответствующие ячейки в других столбцах соответствуют определенным критериям. Вы можете достичь этого с помощью простой формулы, такой как 'MAX (- (Range1 = Criteria1) * - (Range2 = Criteria2) * MaxRange), например. 'Max (- (A1: A15 =" John ") * - (B1: B15 = 20) * C1: C15)' – nightcrawler23