Я ищу формулу, которая будет СЧИТАТЬ количество ячеек в строке, которая:
а. Заполнено данными б. Находится в том же столбце, что и дата, которая произойдет в будущем (после сегодняшней даты).
В приведенном ниже примере ожидаемый результат равен 3, поскольку есть 3 ячейки, которые заполнены, а также находятся в столбцах с соответствующими датами, которые произойдут в будущем. Заполненные ячейки с датами в прошлом игнорируются при подсчете.
Любая помощь будет оценена!
В порядке возрастания безумия:
=SUMPRODUCT((B1:K1>NOW())*(B2:K2<>""))
=COUNTIFS(B1:K1, ">" & NOW(), B2:K2, "<>")
=SUM(IF((B1:K1>NOW())*(B2:K2<>""), 1, 0))
=COUNTA(FILTER(B2:K2, (B1:K1>NOW())*(B2:K2<>"")))
=MMULT(N(B1:K1>NOW()), TRANSPOSE(N(B2:K2<>"")))
=SUM(IF(INDIRECT("B1:K1")>NOW(), IF(INDIRECT("B2:K2")<>"", 1, 0), 0))
Следуя примеру Михала, ради интереса добавляю еще парочку:
=LET(
dates_and_data, $B$1:$AA$100,
data, INDEX(dates_and_data, ROW(), ),
dates, INDEX(dates_and_data, ROW() - 1, ),
SUM((LEN(TRIM(data)) > 0) * (dates > NOW()))
)
Косвенное обращение с (неприятным) OFFSET
:
=LET(
max_items, 100,
dates_and_data, OFFSET(
INDIRECT(ADDRESS(ROW(), COLUMN())),
-1,
1,
2,
max_items
),
data, INDEX(dates_and_data, ROW(), ),
dates, INDEX(dates_and_data, ROW() - 1, ),
SUM((LEN(TRIM(data)) > 0) * (dates > NOW()))
)
Условие 1
Предполагая, что все значения в первой строке являются датами (а не датами со временем, отформатированным как даты), вам может сойти с рук:
B1:K1>TODAY()
Поскольку TODAY()
означает, например. 7/12/2024 0:00 AM
, и если бы время каким-то образом могло проскользнуть в эти даты, то более точным было бы следующее условие (означающее «начиная с завтрашнего дня»):
B1:K1>=TODAY()+1
Если вы будете копировать формулу, вам нужно заблокировать ($
) строку:
B$1:K$1>=TODAY()+1
Условие 2
Глядя на ваш скриншот, кажется, что вы ищете цифры во второй строке:
=ISNUMBER(B2:K2)
Если ваше условие должно состоять из всех заполненных ячеек, вы можете использовать:
=NOT(ISBLANK(B2:K2))
Но это будет включать ячейки, содержащие Nothing (например, ячейки, формула которых имеет значение Nothing (например, =""), или такие ячейки, скопированные как значения). Чтобы исключить эти ячейки, используйте одно из следующих действий (обычно первое):
=B2:K2<>""
=LEN(B2:K2)>0
Формула
Теперь умножьте условия внутри SUMPRODUCT
(устаревшая версия Excel) или SUM
(версии Excel, поддерживающие динамические массивы):
=SUMPRODUCT((B$1:K$1>=TODAY()+1)*ISNUMBER(B2:K2))
=SUM((B$1:K$1>=TODAY()+1)*ISNUMBER(B2:K2))
В старых версиях Excel вы можете использовать SUM
, но вам придется подтвердить формулу, удерживая Ctrl+Shift и нажав Enter (он же CSE
).
Ошибки
Если вы ожидаете ошибок в какой-либо из строк и не хотите их включать, вы можете «вставить» IFERROR
, чтобы не «нарушить» формулу:
=SUMPRODUCT(IFERROR((B$1:K$1>=TODAY()+1)*ISNUMBER(B2:K2),0))
=SUMPRODUCT(IFERROR((B$1:K$1>=TODAY()+1)*(B2:K2<>""),0))
Поскольку ISNUMBER
уже охватывает исключение ошибок для 2-й строки, используйте более точный:
=SUMPRODUCT(IFERROR(B$1:K$1>=TODAY()+1,0)*ISNUMBER(B2:K2))
Связанный
ISNUMBER
не использовалось, потому что умножение чисел во 2-й строке и условие даты (1-й строки) внутри IFERROR
уже покрыли его (все, что не является число, умноженное на число, приведет к ошибке).Попробуйте
=COUNTIFS(Daterange,">"&TODAY(),ValueRange,"<>")