Я не є експертом в Excel! Однак я розумію, що формула працює чудово, загорнутою в MAX, коли до неї передається абсолютний масив, а не повертається з IF, якщо Array повертається з IF. Я думаю, це тому, що отримана довжина двох масивів не відповідає поверненню # N / A для надлишку, і це притягує всю формулу до # N / A. Дивіться цей знімок екрана нижче.
Це привело мене до створення дуже базового UDF у VBA, який повертає лише потрібний масив. У цьому АДС не існує багато перевірок. Переконайтесь, що на нього передано лише посилання на один стовпець, а очікувані значення повернення існують у самій сусідній колонці праворуч. наприклад, якщо ви передасте A1: A4, він перевірить значення в B1: B4.
Натисніть ALT+, F11щоб отримати доступ до редактора VBA, Вставити -> Модуль і вставте в нього наступний код.
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
Ми будемо використовувати цей АДС в остаточному вирішенні. наприклад, щоб отримати масив стовпця B, де A є H1, використовуйте цю формулу як=RetArray(A1:A6,H1)
Наступна хитра частина - це зіставити це повернене значення в точне місце на стовпці Е та отримати значення від D.
Спочатку створіть стовпчик помічників на C, який є об'єднанням наукових досліджень
Формула в C1 є =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, посилання піде не так, якщо ви не маніпулюєте тим самим, використовуючи попереднє посилання на рядок. Спробуйте спробувати повернутися назад. Також перевіряйте на розумніші рішення інших користувачів.
Оновлення
Я розумію, що в той час, як постійні масиви працювали, а довідка комірок не робила (що приводило мене до створення 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)))