Формула массива (возвращаемое количество дней отпуска, взятых за несколько месяцев) не работает должным образом - PullRequest
0 голосов
/ 20 мая 2019

У меня есть формула массива, которая работает не так, как я хочу.

Формула, которую я имею, не возвращает правильное значение (возвращает FALSE), когда даты отпуска находятся в одном и том же месяце, а месяц = ​​текущий месяц

Формула должна проверять следующие условия:

  • Col. E = ежегодный отпуск
  • Col. J = Завершено

и возвращает количество дней отпуска, занятых работником за каждый месяц, согласно следующим условиям: (допустим, текущий месяц = ​​февраль-2019)

a) IF Col.O = Да И Текущий месяц = ​​Дата окончания отпуска (означает, что даты начала и окончания находятся в одном и том же месяце = текущий месяц) ТО возвращаемое количество дней отпуска

b) ЕСЛИ полковник Р = Да (даты отпуска начинаются через один месяц и заканчиваются в другом месяце)

(i) IF Текущий месяц = ​​Дата начала отпуска. ТОГДА возвращаемое количество дней между датой начала отпуска и датой окончания месяца.

(ii) IF Текущий месяц = ​​Дата окончания отпуска, ТО общее количество возвращенных дней (Кол. Ч) минус количество дней между датой начала отпуска и датой окончания месяца месяца

=ArrayFormula(iferror(if(($J$2:$J<>"Complete")*($E$2:$E<>"Annual Leave"),"",if($P$2:$P="yes",if(month($F$2:$F)=month(R$1),NETWORKDAYS.INTL($F$2:$F,EOMONTH($F$2:$F,0),1,Holidays!$B$2:$B),if(month($G$2:$G)=month(R$1),$H$2:$H-NETWORKDAYS.INTL($F$2:$F,EOMONTH($F$2:$F,0),1,Holidays!$B$2:$B),if(month($G$2:$G)=month(R$1),if($O$2:$O="Yes",$H$2:$H,0)))))),"x"))

Формула, которая у меня есть, не возвращает правильное значение (возвращает FALSE), когда даты отпуска находятся в одном и том же месяце, а месяц = ​​текущий месяц

Все остальные условия в порядке (т. Е. Если True, все остальные условия выполнены правильно, и отображается правильное значение, кроме указанного выше условия)

Ссылка на Google лист

screenshot of datasheet with the array formula

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Я провел еще какое-то исследование - и также на основании предположения - мне удалось решить эту проблему.

Вот рабочая формула:

=ArrayFormula(iferror(if((($J$2:$J="Complete")*($E$2:$E="Annual Leave")),
IF($P$2:$P="Yes",
IF(month($F$2:$F)=month(R$1),NETWORKDAYS.INTL($F$2:$F,EOMONTH($F$2:$F,0),1,Holidays!$B$2:$B),
IF(month($G$2:$G)=month(R$1),$H$2:$H-NETWORKDAYS.INTL($F$2:$F,EOMONTH($F$2:$F,0),1,Holidays!$B$2:$B),
IF(month($G$2:$G)=month(R$1)))),
IF((($O$2:$O="Yes")*(month($F$2:$F)=month(R$1))),$H$2:$H,"")),""),""))
0 голосов
/ 20 мая 2019

у вас есть 3 неполных IF, которые возвращают ложные значения ...

=ARRAYFORMULA(IFERROR(
 IF(($J$2:$J="Complete")*($E$2:$E="Annual Leave"),
 IF($P$2:$P="yes",
 IF(MONTH($F$2:$F)=MONTH(S$1), NETWORKDAYS.INTL($F$2:$F, EOMONTH($F$2:$F, 0), 1, Holidays!$B$2:$B),
 IF(MONTH($G$2:$G)=MONTH(S$1), $H$2:$H-NETWORKDAYS.INTL($F$2:$F, EOMONTH($F$2:$F, 0), 1, Holidays!$B$2:$B),
 IF(MONTH($G$2:$G)=MONTH(S$1),
 IF($O$2:$O="Yes", $H$2:$H, 0), ))), ), ), ))

0

...