Я пытаюсь создать функцию для вычисления максимального диапазона на основе 2 критериев, как это делает функция Excel в 2016 году (MAX.IFS), насколько я знаю, что я делаю это нормально, но он возвращает ошибку #VALUE.Определенная пользователем функция для эмуляции Max.ifs в VBA 2010
Не могли бы вы мне помочь?
Option Base 1
Function MaxIf(RangoUno As Range, RangoDos As Range, RangoTres As Range, RUno As Variant, RDos As Variant) As Variant
Dim x() As Variant, y() As Variant, z() As Long, w() As Long
Dim i As Long
Dim ConstraintUno As Variant, ConstraintDos As Variant, k As Long
i = 1
k = 0
ConstraintUno = RUno
ConstraintDos = RDos
x = RangoUno 'Rango que contiene la primera restricción
y = RangoDos 'Rango que contiene la segunda restricción
z = RangoTres 'Rango que contiene los valores numericos
For i = 1 To RangoUno.Rows.Count
If x(i, 1) = RUno Then
If y(i, 1) = RDos Then
k = k + 1
ReDim Preserve w(k, 1)
w(k, 1) = z(i, 1) ' w() es una matriz que almacena los valores numericos en cuya fila cumpla con las rectricciones 1 y 2
End If
End If
Next i
MaxIf = application.max(w)
End Function
Вы не можете 'ReDim Preserve w (k, 1)'. Только «Самый высокий размер» может измениться с помощью «ReDim Preserve». Поскольку вы используете только 1 для верхнего измерения, просто транспонируйте массивы. – Comintern
Вы можете полностью избавиться от размеров 'w', просто сделав его' Long' вместо массива 'Long', инициализируя его' -2,147,483,648', а затем используя 'If z (i, 1)> w Тогда w = z (i, 1) '. Это избавляет от необходимости также «Application.Max». (Но мне не нравится тот факт, что 'w' объявлен как' Long' в любом случае - он, несомненно, путает людей, которые используют эту функцию.) – YowE3K