Подсчет количества ячеек, заполненных данными на основе указанных дат в будущем

Я ищу формулу, которая будет СЧИТАТЬ количество ячеек в строке, которая:

а. Заполнено данными б. Находится в том же столбце, что и дата, которая произойдет в будущем (после сегодняшней даты).

В приведенном ниже примере ожидаемый результат равен 3, поскольку есть 3 ячейки, которые заполнены, а также находятся в столбцах с соответствующими датами, которые произойдут в будущем. Заполненные ячейки с датами в прошлом игнорируются при подсчете.

Любая помощь будет оценена!

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
54
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

В порядке возрастания безумия:

=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,"<>")

Другие вопросы по теме

Суммируйте все ячейки, для которых соответствующая ячейка не является формулой и не возвращает #ЗНАЧЕНИЕ И дата произошла в прошлом
Сопоставление нескольких числовых строк и проверка соответствующих дат в течение 90 дней
Фильтруйте и сортируйте данные с помощью нескольких критериев столбца и строки и сопоставляйте с ними соответствующие данные с помощью фиксированных и гибких return_arrays
Фильтруйте и сортируйте данные с помощью нескольких критериев столбца и строки, а затем сопоставляйте с ними соответствующие данные с помощью нескольких гибких return_arrays
Какой лучший способ репликации суммифов, кроме создания формулы массива?
Как использовать логические операторы с динамическими массивами?
Excel: распечатать точное имя, найденное в списке, для точной даты
Как вернуть упорядоченные уникальные данные в Excel?
Удалить 0 из матрицы
Усложнение суммы Excel

Похожие вопросы

Запись в ячейку файла XLSX с помощью скрипта Sheets
Напишите цикл, который будет проверять все вкладки, количество листов, изменение цвета вкладок на основе значений трех ячеек
Как найти результат в соседней ячейке, если в ней используются буквы, форматирование и цифры?
Копирование ячеек без определенного текста в макросе Excel
Суммируйте все ячейки, для которых соответствующая ячейка не является формулой и не возвращает #ЗНАЧЕНИЕ И дата произошла в прошлом
Сопоставление нескольких числовых строк и проверка соответствующих дат в течение 90 дней
Фильтруйте и сортируйте данные с помощью нескольких критериев столбца и строки и сопоставляйте с ними соответствующие данные с помощью фиксированных и гибких return_arrays
Цикл VBA для извлечения сводки электронных писем за последние 30 дней
Фильтруйте и сортируйте данные с помощью нескольких критериев столбца и строки, а затем сопоставляйте с ними соответствующие данные с помощью нескольких гибких return_arrays
Какой лучший способ репликации суммифов, кроме создания формулы массива?