IF + AND + Формула диапазона дат - PullRequest
0 голосов
/ 28 марта 2019

У меня проблема с созданием формулы, поэтому я хочу попросить вас о помощи.

В листе Excel содержится 150 000 строк, и с помощью этой формулы я хочу сохранить время.

У меня есть Дата, Имя и Статус, и мне нужно увидеть в другой ячейке, какое Имя было 4 раза или более подряд подряд ХОРОШО или ОК

Пример ввода: https://imgur.com/aRALd9S

Я думаю, ЕСЛИ+ И + ДАТА Диапазон достаточно, но я не знаю, как его собрать.

Большое спасибо за ваши предложения!

Вот что у меня есть: https://imgur.com/Y5WAov5

= COUNTIFS ($ D $ 2: $ D $ 15; D2; $ C $ 2: $ C $ 15; «ОК»; $ D $ 2: $ D $ 15; D2; $ E $ 2: $ E $ 15; »> = "& Е2; $ E $ 2: $ E $ 15;" <= "& Е2 + 7) + (COUNTIFS ($ D $ 2: $ D $ 15; D2; $ C $ 2: $ C $ 15;" ХОРОШО ")) </p>

С этим я могу подсчитать, сколько раз у меня есть Имя, которое ОК или ХОРОШО и находится в диапазоне за одну неделю, но я все еще не знаю, что я должен изменить, что я остановлюсьсчитать, когда ложь есть

1 Ответ

0 голосов
/ 29 марта 2019

Ну, вот что вы можете попробовать. Вы могли бы сделать это в одной формуле с формулой массива, но с 150K строками кажется намного лучше попытаться избежать формул массива и использовать вспомогательные столбцы там, где это необходимо.

Первый вспомогательный столбец просто содержит идентификатор человека, если строка содержит FALSE:

=IF(H2=FALSE,I2,"")

Второй вспомогательный столбец содержит смещение от текущей строки до следующей FALSE для того же человека:

=IFERROR(MATCH(I2,K2:K$15,0)-1,16-ROW())

Так что теперь вы можете использовать в основном ту же формулу COUNTIFS, но заменяя каждый диапазон на INDEX, который указывает, сколько строк вы должны считать:

=IF(H2=FALSE,0,COUNTIFS(I2:INDEX(I2:I$15,L2),I2,H2:INDEX(H2:H$15,L2),"GOOD",J2:INDEX(J2:J$15,L2),">="&J2,J2:INDEX(J2:J$15,L2),"<="&J2+7))+
    IF(H2=FALSE,0,COUNTIFS(I2:INDEX(I2:I$15,L2),I2,H2:INDEX(H2:H$15,L2),"OK",J2:INDEX(J2:J$15,L2),">="&J2,J2:INDEX(J2:J$15,L2),"<="&J2+7))

enter image description here

Примечание 1

16 во втором уравнении позволяет учесть случай, когда после текущей строки больше нет строк, помеченных как FALSE, поэтому MATCH не выполняется. Это заставляет Countifs считать все от текущих строк до конца данных.

Примечание 2 - расширение до большего диапазона данных

Вы сможете заменить цифру 16 на countA (I: I), размер данных плюс заголовки.

Не должно быть проблем с использованием большего диапазона для индекса, например,

    =IF(H2=FALSE,0,COUNTIFS(I2:INDEX(I2:I$150000,L2),I2,H2:INDEX(H2:H$150000,L2),"GOOD",J2:INDEX(J2:J$150000,L2),">="&J2,J2:INDEX(J2:J$150000,L2),"<="&J2+7))+
 IF(H2=FALSE,0,COUNTIFS(I2:INDEX(I2:I$150000,L2),I2,H2:INDEX(H2:H$150000,L2),"OK",J2:INDEX(J2:J$150000,L2),">="&J2,J2:INDEX(J2:J$150000,L2),"<="&J2+7))

, но увеличение диапазона поиска в строках MATCH до 150K во второй формуле серьезно влияет на производительность при повторении 150K раз. Единственное решение, которое я могу придумать в данный момент, - это посмотреть, можно ли разместить максимум на расстоянии от любого вхождения имени до следующего вхождения имени с FALSE рядом с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...