Я не эксперт в Excel! Однако я понимаю, что формула отлично работает в MAX, когда ей передается абсолютный массив, а не массив, возвращаемый из IF. Я предполагаю, что это потому, что результирующие длины двух массивов не совпадают с возвратом # N / A для избыточного значения, и это переводит всю формулу в # N / A. Смотрите этот скриншот ниже.
Это привело меня к созданию очень простого UDF в VBA, который возвращает только необходимый массив. В этом UDF нет большого количества проверок. Убедитесь, что передается только одна ссылка на столбец, и ожидаемые возвращаемые значения существуют в соседнем столбце справа. Например, если вы передадите A1: A4, он проверит значения в B1: B4.
Нажмите ALT+ F11для доступа к VBA Editor, Insert -> Module и вставьте в него следующий код.
Public Function RetArray(r1 As Range, a As String) As Variant
Dim i
i = 0
Dim myarray()
For Each cell In r1
If cell.Value = a Then
i = i + 1
End If
Next cell
ReDim myarray(i)
Dim j
j = 0
For Each cell In r1
If cell.Value = a Then
myarray(j) = cell.Offset(0, 1).Value
j = j + 1
End If
Next cell
RetArray = myarray
End Function
Мы будем использовать этот UDF в окончательном решении. например, чтобы получить массив столбца B, где A - H1, используйте эту формулу как=RetArray(A1:A6,H1)
Следующая сложная часть состоит в том, чтобы отобразить это возвращенное значение в точное местоположение в столбце E и получить значение из D.
Сначала создайте вспомогательную колонку в C, которая является конкатенацией D & E
Формула в С1 есть =E1&F1
и перетащите ее вниз к предполагаемым ячейкам ниже Убедитесь, что ваша Дата имеет правильный формат даты в вашем Excel, а не как текст, иначе это решение не будет работать.
Ваш стол в H1: H4.
Теперь в I1 положим следующую формулу.
=INDEX($D$1:$D$9,MIN(IF($C$1:$C$9=MAX(IF($F$1:$F$9=RetArray($A$1:$A$8,H1),$E$1:$E$9,0))&RetArray($A$1:$A$8,H1),ROW($C$1:$C$9),99^99)))
Нажмите CTRL+ SHIFT+, ENTERчтобы создать и создать массив формул и перетащите его вниз по всей длине таблицы.
Это решение не полностью проверено, хотя. Это будет хорошо работать только в том случае, если вы начнете данные в строке 1, иначе ссылка будет неправильной, если вы не манипулируете ею, используя предыдущую ссылку на строку. Попробуйте и вернитесь назад. Также проверяйте более разумные решения других пользователей.
Обновить
Я понимаю, что, хотя константные массивы работали, а Cell Reference не работали (что привело меня к созданию UDF, возвращающего массив), использование функции TRANSPOSE фактически создает внутри себя своего рода константный массив. Так что просто замените UDF на TRANSPOSE, завернутый в IF, и решение будет работать без кода VBA и каких-либо вспомогательных столбцов.
Попробуйте и проверьте, подходит ли вам это.
Формула массива в I1 и вниз
=INDEX($D$1:$D$9,MIN(IF($E$1:$E$9&$F$1:$F$9=MAX(IF($F$1:$F$9=TRANSPOSE(IF($A$1:$A$8=H1,$B$1:$B$8)),$E$1:$E$9,0))&TRANSPOSE(IF($A$1:$A$8=H1,$B$1:$B$8)),ROW($C$1:$C$9),99^99)))