Как рассчитать следующий / тот же день на основе таблицы доступности? - PullRequest
1 голос
/ 17 октября 2019

Я работаю над формулой Excel, чтобы найти следующий доступный день на основе таблицы Excel. У меня есть две таблицы, A и B, в таблице A есть даты и столбец результатов, в таблице B есть даты и числа, я хотел бы получить дату из таблицы B в столбец результатов таблицы A на основе количества дат из таблиц A и BОбратите внимание, что дата в столбце «результат» таблицы A - это ожидаемый результат, и она всегда совпадает с датой в столбце даты таблицы A. или больше, чем формат даты: месяц / дата / год

table A 
Date    Result
01-02-2018  01-02-2018
01-02-2018  01-02-2018
01-05-2018  01-05-2018
01-05-2018  01-05-2018
01-05-2018  01-07-2018
01-05-2018  01-07-2018
01-06-2018  01-07-2018
01-07-2018  01-10-2018
01-09-2018  01-10-2018
01-11-2018  01-12-2018
01-12-2018  01-12-2018


table B 
Date    Count
01-02-2018  3
01-03-2018  1
01-04-2018  3
01-05-2018  2
01-07-2018  3
01-10-2018  3
01-12-2018  2


Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Что ж, эта задача заняла у меня больше времени, чем ожидалось, и, наконец, я нашел решение с помощью пары вспомогательных столбцов (не уверен, если это вариант?).

Итак, предположим, что у вас есть следующие именованные диапазоны :

  • TblA_Date , являющиеся всеми датами в вашем Table A (эта опция необязательна, как и яне используйте его в моем решении ...);
  • TblB_Date - все даты в вашем Table B.

Во-первых, я "развернуто " your Table B до структуры списка с указанием всех дат:

Expand 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 на основе ваших условий, которые

  1. "для каждогодата в таблице A, дата результата - та же самая дата или следующая более высокая дата " AND
  2. дата с Table B может использоваться только не болеесоответствующий ему счет .

Index Column

Формула в ячейке 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)

Result

Мысли , трудная часть, которую яне может быть преодолено использование "круговой ссылки" или "самостоятельной ссылки" в столбцах помощника. Другими словами, я не уверен, как использовать одну формулу для возврата массива значений, вычисление которого зависит от его прецедентного значения. Я надеюсь, что кто-то может найти более элегантный способ решения этого вопроса:)

Дайте мне знать, если у вас есть какие-либо вопросы. Ура :) 1123 *

0 голосов
/ 17 октября 2019

Предположим, что «таблица A» вставлена ​​в A1: A9, включает A1: «таблица A», A2:B2 (заголовок): «Дата» и «Результат»

«таблица B» вставлена ​​вA11: A1, включают A11: «таблица B», A12:B12 (заголовок): «Дата» и «Счет»

В столбце «Результат» B3, формула скопирована:

=IF(COUNTIF(A$3:A3,A3)<=IFERROR(VLOOKUP(A3,$A$13:$B$17,2,0),0),A3,AGGREGATE(15,6,$A$13:$A$17/($A$13:$A$17>=MAX(A3,INDEX(A3:A$10,MATCH(1,INDEX(0+(A3:A$10<>A3),0),0)))),1))
...