Что ж, эта задача заняла у меня больше времени, чем ожидалось, и, наконец, я нашел решение с помощью пары вспомогательных столбцов (не уверен, если это вариант?).
Итак, предположим, что у вас есть следующие именованные диапазоны :
- TblA_Date , являющиеся всеми датами в вашем
Table A
(эта опция необязательна, как и яне используйте его в моем решении ...); - TblB_Date - все даты в вашем
Table B
.
Во-первых, я "развернуто " your Table B
до структуры списка с указанием всех дат:
Формула для первого вспомогательного столбца в ячейке J2
моего примера:
=SUM($I$2:I2)
, который должен найти промежуточную сумму отсчетов в Table B
.
Формула для второго вспомогательного столбцав ячейке M2
это:
=INDEX(TblB_Date,MATCH(1,--(ROW(A1)<=$J$2:$J$8),0))
, которая "выкладывает" все даты с Table B
, используя позицию строки в качестве ссылки и сравнивая ее с бегущей кталь отсчетов и возвращение соответствующей даты. Учитывая, что это формула массива вы ДОЛЖНЫ нажмите Ctrl + Shift + Введите после завершения формулы впанель формул, иначе она не будет работать правильно. Затем вы можете просто перетащить формулу вниз, чтобы применить ее к.
Обратите внимание, что я дал второму вспомогательному столбцу M2:M18
(исключая M19
, который является ошибкой) имя TblB_Date_Expanded .
Следующим шагом является поиск позиции нужной даты в TblB_Date_Expanded на основе ваших условий, которые
- "для каждогодата в таблице A, дата результата - та же самая дата или следующая более высокая дата " AND
- дата с
Table B
может использоваться только не болеесоответствующий ему счет .
Формула в ячейке E2
:
=MAX(MATCH(AGGREGATE(15,6,TblB_Date_Expanded/(A2<=TblB_Date_Expanded),1),TblB_Date_Expanded,0),E1+1)
гдеA2
- это первая дата в Table A
, как вы увидите на моем следующем скриншоте.
Логика заключается в использовании функции AGGREGATE для возврата ближайшей даты начала в TblB_Date_Expanded
на основе указанной даты в Table A
, затем используйте функцию MATCH для возврата позиции строки и, наконец, используйте * 11Функция 02 * MAX для увеличения позиции на 1
, если эта же позиция уже использовалась (в строке выше).
При известной позиции строки мы можем легко вернуть соответствующуюдата от TblB_Date_Expanded
с использованием следующей формулы:
=INDEX(TblB_Date_Expanded,E2)
Мысли , трудная часть, которую яне может быть преодолено использование "круговой ссылки" или "самостоятельной ссылки" в столбцах помощника. Другими словами, я не уверен, как использовать одну формулу для возврата массива значений, вычисление которого зависит от его прецедентного значения. Я надеюсь, что кто-то может найти более элегантный способ решения этого вопроса:)
Дайте мне знать, если у вас есть какие-либо вопросы. Ура :) 1123 *