Подсчет строк с непустым значением

В электронной таблице Google: Как я могу подсчитать строки данной области, которые имеют значение? Все подсказки по этому поводу, которые я обнаружил до сих пор, приводят к формулам, которые действительно подсчитывают строки с непустым содержимым (включая формулу), но ячейку с

=IF(1=2;"";"")  // Shows an empty cell

тоже считается.

Каково решение этой простой задачи?

Ответ 1

Сделайте еще один столбец, который определяет, является ли ссылочная ячейка пустой, используя функцию "CountBlank". Затем используйте count для значений, созданных в новом столбце "CountBlank".

Ответ 2

Я просто использовал =COUNTIF(Range, "<>"), и он подсчитал для меня непустые ячейки.

Ответ 3

=counta(range) 
  • counta: "Возвращает счетчик числа значений в наборе данных"

    Примечание: counta считает "" значением . Только ячейки, которые пусты (нажмите delete в ячейке, чтобы ее удалить), не учитываются.

    Поддержка Google: https://support.google.com/docs/answer/3093991

  • countblank: "Возвращает количество пустых ячеек в заданном диапазоне"

    Примечание: countblank рассматривает обе пустые ячейки (нажмите delete, чтобы удалить ячейку) и ячейки, у которых есть формула, которая возвращает "" как пустое.

    Поддержка Google: https://support.google.com/docs/answer/3093403

Если у вас есть диапазон, который включает формулы, которые приводят к "", вы можете изменить свою формулу из

=counta(range)

в

=Counta(range) - Countblank(range)

EDIT: функция countblank, а не countblanks, последняя даст ошибку.

Ответ 4

Вот что я считаю лучшим решением на данный момент:

=CountIf(ArrayFormula(range<>""),TRUE)

Вот почему в 3 простых шага

Шаг 1: Простой как пирог - добавьте дополнительный столбец

Ответ от eniacAvenger даст правильное решение, не беспокоясь о крайних случаях, так как =A1<>"" кажется, приходит к правильному значению истина/ложь, основанном на том, как мы интуитивно думаем о пустых ячейках, либо о девственных, либо о созданных пробелах.

Итак, представьте, что у нас есть эти данные, и мы хотим, чтобы количество незаполненных записей в B2:B6:

|   |      A      |   B   |    C    |
|---|-------------|-------|---------|
| 1 | Description | Value | B1<>""  |
| 2 | Text        | H     | TRUE    |
| 3 | Number      | 1     | TRUE    |
| 4 | IF -> ""    |       | FALSE   |
| 5 | IF -> Text  | h     | TRUE    |
| 6 | Blank       |       | FALSE   |

Если бы мы полагались на столбец C, мы могли бы получить количество значений в B следующим образом:

=COUNTIF(C2:C6,True)

Шаг 2. Использование FormulaArray для динамического создания дополнительного столбца

Тем не менее, комментарий CommentRatio является допустимым - если вам нужен дополнительный столбец, вы часто можете достичь той же цели с помощью ArrayFormula который может создать столбец в памяти, не ArrayFormula пространство листа.

Так что, если мы хотим создать C динамически, мы можем использовать формулу массива следующим образом:

=ArrayFormula(B2:B6<>"")

Если мы просто поместим его в C2, он создаст вертикальный массив одним штрихом пера:

|   |      A      |   B   |    C                     |
|---|-------------|-------|--------------------------|
| 1 | Description | Value | =ArrayFormula(B2:B6<>"") |
| 2 | Text        | H     | TRUE                     |
| 3 | Number      | 1     | TRUE                     |
| 4 | IF -> ""    |       | FALSE                    |
| 5 | IF -> Text  | h     | TRUE                     |
| 6 | Blank       |       | FALSE                    |

Шаг 3: Подсчет значений в динамическом столбце

Но после этого нам больше не нужен столбец для простого отображения значений.

ArrayFormula разрешит следующий диапазон: {True,True,False,True,False}.
CountIf просто принимает в любом диапазоне и в этом случае может посчитать количество значений True.

Таким образом, мы можем обернуть CountIf вокруг значений, созданных ArrayFormula следующим образом:

=CountIf(ArrayFormula(B2:B6<>""),TRUE)

Дальнейшее чтение

Другие решения в этом потоке либо слишком сложны, либо терпят неудачу в определенных крайних случаях, которые я перечислил в этом тестовом листе:

Google Spreadsheet - CountA Test - Демо

Почему CountA работает так CountA, смотрите мой ответ здесь

Ответ 5

Для меня ни один из ответов не работал для диапазонов, содержащих как девственные ячейки, так и ячейки, которые пусты на основе формулы (например, =IF(1=2;"";""))

Что для меня это решило:

=COUNTA(FILTER(range, range <> ""))

Ответ 6

Решено использовать решение, которое я нашел googling от Yogi Anand: https://productforums.google.com/d/msg/docs/3qsR2m-1Xx8/sSU6Z6NYLOcJ

В приведенном ниже примере подсчитывается количество непустых строк в диапазоне A3: C, не забудьте обновить оба диапазона в формуле с интересующим вас диапазоном.

=ArrayFormula(SUM(SIGN(MMULT(LEN(A3:C), TRANSPOSE(SIGN(COLUMN(A3:C)))))))

Также избегайте циклических зависимостей, это произойдет, если вы, например, подсчитаете количество непустых строк в A: C и поместите эту формулу в столбец A или C.

Ответ 7

Учитывая диапазон A:A, Id предлагает:

=COUNTA(A:A)-(COUNTIF(A:A,"*")-COUNTIF(A:A,"?*"))

Проблема заключается в том, что COUNTA перечитывает точно количество ячеек с нулевыми строками длины "".

Решение состоит в том, чтобы найти счетчик именно этих ячеек. Это можно найти, просмотрев все текстовые ячейки и вычитая все текстовые ячейки с хотя бы одним символом

  • COUNTA (A: A): ячейки со значением, включая "", но исключая по-настоящему пустые ячейки
  • COUNTIF (A: A, "*" ): ячейки распознаются как текст, включая "", но исключая по-настоящему пустые ячейки
  • COUNTIF (A: A, "? *" ): ячейки, распознаваемые как текст с хотя бы одним символом

Это означает, что значением COUNTIF(A:A,"*")-COUNTIF(A:A,"?*") должно быть количество текстовых ячеек за вычетом количества текстовых ячеек, у которых есть хотя бы один символ, т.е. количество ячеек, содержащих ровно ""

Ответ 8

Более простое решение, которое работает для меня:

=COUNTIFS(A:A;"<>"&"")

Он подсчитывает как числа, строки, даты и т.д., которые не являются пустыми

Ответ 9

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

Одним из возможных решений для диапазона B3:E29 является, например,

=SUM(ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1)))

Здесь ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1)) возвращает столбец 0 (если строка пуста) и 1 (еще).

Еще один дан в отношении ответа.

Ответ 10

Вы можете определить пользовательскую функцию с помощью Apps Script (Инструменты> Редактор скриптов), которая называется, например, numNonEmptyRows:

function numNonEmptyRows(range) {
  Logger.log("inside");
  Logger.log(range);
  if (range && range.constructor === Array) {
    return range.map(function(a){return a.join('')}).filter(Boolean).length
  }
  else {
    return range ? 1 : 0;
  }
}

А затем используйте его в такой ячейке =numNonEmptyRows(A23:C25) чтобы подсчитать количество непустых строк в диапазоне A23:C25;

Ответ 11

В Google Sheets для подсчета количества строк, которые содержат хотя бы одну непустую ячейку в двумерном диапазоне:

=ARRAYFORMULA(
  SUM(
    N(
      MMULT(
        N(A1:C5<>""),
        TRANSPOSE(COLUMN(A1:C5)^0)
      )
      >0
    )
  )
)

Где A1: C5 - диапазон, который вы проверяете на наличие непустых строк.

Формула исходит и объясняется в следующей статье от EXCELXOR - https://excelxor.com/2015/03/30/counting-rows-where-at-least-one-condition-is-met/

Ответ 12

Очень гибкий способ сделать это - использовать ARRAYFORMULA.

В качестве примера представьте, что вы хотите считать непустые строки (текстовые поля), вы можете использовать этот код:

=ARRAYFORMULA(SUM(IF(Len(B3:B14)>0, 1, 0)))

Здесь происходит то, что "ArrayFormula" позволяет вам работать с набором значений. Используя функцию SUM, вы указываете "ArrayFormula" для суммирования любого значения набора. Предложение "If" используется только для проверки "пусто" или "не пусто", 1 для не пустого и 0 в противном случае. "Len" возвращает длину различных текстовых полей, где вы определяете набор (диапазон), который вы хотите проверить. Наконец, "ArrayFormula" будет суммировать 1 для каждого поля в наборе (диапазоне), в котором "len" возвращает больше 0.

Если вы хотите проверить любое другое условие, просто измените первый аргумент предложения IF.

Ответ 13

Это работает для меня:

=SUMPRODUCT(NOT(ISBLANK(F2:F)))

Подсчет всех непустых ячеек от F2 до конца столбца