In a Google Spreadsheet: How can I count the rows of a given area that have a value? All hints about this I found up to now lead to formulas that do count the rows which hav
Make another column that determines if the referenced cell is blank using the function "CountBlank". Then use count on the values created in the new "CountBlank" column.
=counta(range)
counta
: "Returns a count of the number of values in a dataset"
Note: CountA
considers ""
to be a value. Only cells that are blank (press delete in a cell to blank it) are not counted.
Google support: https://support.google.com/docs/answer/3093991
countblank
: "Returns the number of empty cells in a given range"
Note: CountBlank
considers both blank cells (press delete to blank a cell) and cells that have a formula that returns ""
to be empty cells.
Google Support: https://support.google.com/docs/answer/3093403
If you have a range that includes formulae that result in ""
, then you can modify your formula from
=counta(range)
to:
=Counta(range) - Countblank(range)
EDIT: the function is countblank
, not countblanks
, the latter will give an error.
=CountIf(ArrayFormula(range<>""),TRUE)
The answer by eniacAvenger will yield the correct solution without worrying about edge cases as =A1<>""
seems to arrive at the correct truthy/falsy value based on how we intuitively think of blank cells, either virgin blanks or created blanks.
So imagine we have this data and we want the Count of non-blanks in 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 |
If we relied on Column C, we could get the count of values in B like this:
=COUNTIF(C2:C6,True)
FormulaArray
to dynamically create Extra ColumnHowever, consideRatio's comment is a valid one - if you need an extra column, you can often accomplish the same goal with an ArrayFormula
which can create a column in memory without eating up sheet space.
So if we want to create C dynamically, we can use an array formula like this:
=ArrayFormula(B2:B6<>"")
If we simply put it in C2, it would create the vertical array with a single stroke of the pen:
| | 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 |
But with that solved, we no longer need the column to merely display the values.
ArrayFormula
will resolve to the following range: {True,True,False,True,False}
.
CountIf
just takes in any range and in this case can count the number of True values.
So we can wrap CountIf
around the values produced by ArrayFormula
like this:
=CountIf(ArrayFormula(B2:B6<>""),TRUE)
The other solutions in this thread are either overly complex, or fail in particular edge cases that I've enumerated in this test sheet:
For why CountA
works the wonky way it does, see my answer here
It's work for me:
=SUMPRODUCT(NOT(ISBLANK(F2:F)))
Count of all non-empty cells from F2 to the end of the column
A simpler solution that works for me:
=COUNTIFS(A:A;"<>"&"")
It counts both numbers, strings, dates, etc that are not empty
As far as I can see, most of the solutions here count the number of non empty cells, and not the number of rows with non empty cell inside.
One possible solution for the range B3:E29
is for example
=SUM(ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1)))
Here ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1))
returns a column of 0
(if the row is empty) and 1
(else).
Another one is given in consideRatio's answer.