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

128

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

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

тоже засчитывается.

Как решить эту простую задачу?

Robbit
источник
6
Подойдет ли вам CountA? Также см. Эту тему SO: stackoverflow.com/questions/12519073/…
Ozair Kafray
Возможный дубликат ячеек Count, содержащих любой текст
Рубен

Ответы:

-12

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

eniacAvenger
источник
3
Я считаю это четким заявлением о том, что другого решения этой проблемы нет. Большое спасибо.
Роббит
Когда вам нужно добавить еще один столбец, вы почти всегда можете решить его, используя некоторые дополнительные формулы, например, содержащие некоторые конкатинаты / разбиения / соединения и т. Д., Я свяжусь с вами, если я решу его.
рассмотрениеRatio
Например, следующая строка составляет одну строку из двухмерного диапазона ячеек, что часто может решить множество проблем: = split (ArrayFormula (concatenate (C3: O4 & ";")), ";") --- - я продолжаю работать над решением проблемы
рассуждение
Я опубликовал ответ, который решает цель, не полагаясь на отдельные столбцы
consideRatio
203

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

Майк
источник
14
К сожалению, эта формула также считает ячейки с формулами с пустыми результатами.
Давид Везеловски
23
У меня была та же проблема, что и у @ DávidVeszelovszki [подсчитывались формулы]. Я решил с помощью=COUNTIF(Range,"?*")
Shawnrad
Вопрос в том, как подсчитать строки в диапазоне. Ты считаешь ячейки в диапазоне?
AnnanFay
125
=counta(range) 
  • counta: "Возвращает количество значений в наборе данных"

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

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

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

    Примечание. CountBlankУчитываются как пустые ячейки (нажмите «Удалить», чтобы очистить ячейку), так и ячейки с формулой, которая возвращается ""как пустые ячейки.

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

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

=counta(range)

чтобы:

=Counta(range) - Countblank(range)

РЕДАКТИРОВАТЬ: функция countblank, а не countblanks, последняя выдаст ошибку.

Delta_zulu
источник
5
К сожалению, это не работает для диапазонов, которые включают как исходные, так и вычисленные пробелы. (Он вычитает неучтенные девственные пробелы из значения COUNTA.)
Давид Везеловски,
3
Спасибо за приятные отрицательные голоса, ОП специально упомянул, что причина, по которой у него есть пробелы, связана с формулой вроде = IF (1 = 2; ""; ""), и я специально упомянул: "Если у вас есть диапазон, который включает формулы, результат в "" ... "
Delta_zulu
Вопрос в том, как подсчитать строки в диапазоне. Ты считаешь ячейки в диапазоне?
AnnanFay
38

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

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

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

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

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

Итак, представьте, что у нас есть эти данные и мы хотим, чтобы в нем было количество непустых пробелов 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для динамического создания дополнительного столбца

Тем не менее, комментарий consideRatio является допустимым - если вам нужен дополнительный столбец, вы часто можете достичь той же цели с помощью, 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просто принимает любой диапазон и в этом случае может подсчитать количество истинных значений.

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

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

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

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

Таблица Google - Тест CountA - Демо

О том, почему CountAработает шаткий способ, см. Мой ответ здесь

KyleMit
источник
4
Этот ответ является единственным полным решением: он успешно считает только ячейки с текстом (включая пробелы), числами и значениями ИСТИНА / ЛОЖЬ, исключая сгенерированные пробелы, действительно пустые ячейки и ошибки (# N / A, #REF !, #VALUE , #НАЗВАНИЕ?) . Он также вернет 0 там, где нет значений
spacepickle
2
Я немного запутался, читая это, и случайно обнаружил, что эта формула тоже работает ... = CountIf (ArrayFormula (B2: B6 <> ""), TRUE) ... Пожалуйста, не поймите меня неправильно, это ответ лучший, и за него нужно проголосовать больше.
Twindham
2
@twindham согласился с тем, что с точки зрения построения блоков этого ответа, вероятно, проще сохранить каждый логический компонент неповрежденным и переупорядочить, ArrayFormula(...)чтобы вернуть массив значений внутри, CountIfкак вы предложили. Я обновил ответ и демонстрацию электронной таблицы. Они оба будут делать одно и то же, но чистота рядом с добротой.
KyleMit
Вопрос в том, как подсчитать строки в диапазоне. Вы считаете непустые ячейки в одном столбце? Может ли ваш подход работать с несколькими столбцами?
AnnanFay
19

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

Для меня это решило следующее:

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

Давид Везеловски
источник
Отличное решение в случае, если столбецb содержит формулы, которые возвращают значение ""! Большое спасибо
user1561325
К сожалению, похоже, что если Filter()не найти никаких элементов, он вернет, #N/Aкоторый COUNTA()рассматривается как элемент, и поэтому всегда будет возвращать 1, даже если счетчик должен быть равен нулю. Пример в Google
Таблицах
7
@KyleMit Вы можете избавиться от проблемы с нулевым счетом, добавив к диапазону постоянное значение и вычтя 1 из счетчика с помощью=COUNTA(filter({1;range},{1;range}<>"")) - 1
spacepickle
Вопрос в том, как подсчитать строки в диапазоне. Вы подсчитываете ячейки в диапазоне. Этот код не работает, если вы попытаетесь применить его к диапазону строк.
AnnanFay
9

Решено с помощью решения, которое я нашел в Google Йоги Ананд: 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.

consideRatio
источник
1
Нашел гораздо более чистое решение, я опубликовал его как новый ответ.
Давид Везеловски
1
Единственное решение, которое отвечает на вопрос, - подсчитывать количество строк с непустой ячейкой внутри, а не подсчитывать количество непустых ячеек в диапазоне.
Kpym 07
7

Для меня это работает:

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

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

nomnom
источник
5

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

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

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

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

  • COUNTA (A: A): ячейки со значением, включая, ""но исключая действительно пустые ячейки
  • СЧЁТЕСЛИ (A: A, "*"): ячейки, распознанные как текст, включая, ""но исключая действительно пустые ячейки
  • СЧЁТЕСЛИ (A: A, "? *"): Ячейки, распознанные как текст с хотя бы одним символом

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

spacepickle
источник
Используя демонстрационный лист @KyleMit, я обнаружил, что эта формула все еще превышает подсчет, потому что она будет включать любые ячейки с ошибками
spacepickle
Есть ли разница между ячейкой, содержащей строку нулевой длины, и ячейкой, которая вообще ничего не содержит? Это то, что заставляет людей не доверять компьютерам. , , Вы понимаете, почему у нас не может быть хороших вещей?
Cheeso
Вопрос в том, как подсчитать строки в диапазоне. Ты считаешь ячейки в диапазоне?
AnnanFay
5

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

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

Он считает оба числа, строки, даты и т. Д., Которые не пусты.

user300905
источник
5
можно упростить в такой форме, как = СЧЁТЕСЛИ (A: A, «<>»)
Том
Вопрос в том, как подсчитать строки в диапазоне. Ты считаешь ячейки в диапазоне?
AnnanFay
3

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

Одно из возможных решений для диапазона, 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(иначе).

Еще один дается в ответе ThinkRatio .

Kpym
источник
2

Вы можете определить пользовательскую функцию с помощью скрипта приложений (Инструменты> Редактор скриптов), например 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;

Kpym
источник
2

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

=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/

Уилл Райс
источник
1

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

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

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

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

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

Pablo
источник