2016-01-11 2 views
1

Может кто-то может помочь с формулой для расчета следующей доступной даты, исключая список конкретных дат (заблокированные даты для какого-либо события). В прикрепленном изображении, когда введена дата Плана в столбце A, она должна рассчитать дату счета на основании 1. Самая ранняя дата счета - это дата события, ближайшая к (дата плана + 5 дней). 2. Если дата счета рассчитывается один из заблокированных дат, дата счета должен быть установлен на дату следующего рабочегоФормула для расчета следующей даты, за исключением списка дат

Шаг 1 выше, вычисляется, как показано в формуле,

=MIN(IF($B$2:$B$8-($A2+5)>=0,$B$2:$B$8)) 

На шаге 2 любой помощь приветствуется. Когда вы попробовали Vlookup на расчетную дату счета, чтобы соответствовать значению в заблокированных датах - как только он рассчитывает на следующий день. Но при расчете на следующий день также заблокирован день, он терпит неудачу. Например, в первой строке данных дата счета-фактуры, основанная на шаге 1, составляет 20 января-16, которая является заблокированной датой.

На шаге 2, если VLOOKUP используется для соответствия 20-янв-16 и приращения на 1 день, он дает 21-янв-16, который снова является заблокированной датой. Любые предложения для рекурсии/итеративного расчета?

Sample data

OP's sample data

блокированных даты довольно большой список в течение года и в случайном порядке.

+0

Есть ли вероятность, что Sat, Sun или оба должны быть исключены? – Jeeped

+0

Я добавил [tag: excel] и [tag: excel-formula], чтобы ваш вопрос получал более пристальное внимание. – Jeeped

ответ

2

WORKDAY.INTL function¹ должен быть особенно эффективен для этого. Вы не только можете указать диапазон праздников для использования в качестве заблокированных дат, но вы можете указать специальную строку weekend, которая идентифицирует дни, которые следует рассматривать как выходные. Поскольку вы не хотите исключать любые другие дни недели, это будет просто "0000000".

В Е2, как,

=IFERROR(WORKDAY.INTL(AGGREGATE(15, 6, (B$2:INDEX(B:B, MATCH(1E+99,B:B)))/(B$2:INDEX(B:B, MATCH(1E+99,B:B))-(A2+5)>=0), 1)-1, 1, "0000000", C$2:INDEX(C:C, MATCH(1E+99,C:C))), "") 

Поскольку мы имеем дело с функциями второго поколения, я изменил вашу формулу MIN(IF(... массива к AGGREGATE² function, который не должен быть массив вошел и использовать упаковочную IFERROR function, чтобы избежать отображающего #DIV/0! ошибка в E8.

Заполнить при необходимости.

workday_intl_aggregate


¹ WORKDAY.INTL function¹ была введена с Excel 2010. Он не доступен в более ранних версиях.

² AGGREGATE function был представлен с Excel 2010. Он не доступен в более ранних версиях.

+0

Это работает потрясающе. Большое спасибо. Дата счета - это производное значение, основанное на некоторых других проверках. Попытка комбинировать все формулы. – amdN

Смежные вопросы