Contar linhas com valor não vazio


128

Em uma planilha do Google: como posso contar as linhas de uma determinada área que possuem um valor? Todas as dicas que encontrei até agora levam a fórmulas que contam as linhas que possuem um conteúdo não vazio (incluindo a fórmula), mas uma célula com

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

também é contado.

Qual é a solução para esta tarefa simples?


6
CountA não funcionaria para você? Consulte também este thread do SO: stackoverflow.com/questions/12519073/…
— Ozair Kafray 5/15


Respostas:


-11

Faça outra coluna que determine se a célula referenciada está em branco usando a função "CountBlank". Em seguida, use count nos valores criados na nova coluna "CountBlank".


3
Considero isso uma afirmação clara de que não há outra solução para isso. Muito obrigado.
— Robbit

Quando você precisar adicionar outra coluna, quase sempre poderá resolvê-la usando algumas fórmulas extras, como conter concatinado / dividido / ingressar etc., retornarei se você resolver o problema.
— consideRatio

Por exemplo, a linha a seguir cria uma única linha em um 2º intervalo de células, que geralmente pode resolver muitos problemas: = split (ArrayFormula (concatenate (C3: O4 & ";")), ";") --- - doente continuar trabalhando para resolver o problema
— consideRatio

Eu postei uma resposta que resolve o objetivo sem depender de colunas separadas
— consideRatio

203

Acabei de usar =COUNTIF(Range, "<>")e contava células não vazias para mim.


14
Infelizmente, essa fórmula também conta células com fórmulas de resultados em branco.
— Dávid Veszelovszki

23
Eu tive o mesmo problema que @ DávidVeszelovszki [fórmulas foram contadas]. Eu resolvi com=COUNTIF(Range,"?*")
— shawnrad 14/09/18

A questão é perguntar como contar as linhas em um intervalo. Você está contando as células em um intervalo?
— precisa saber é o seguinte

124
=counta(range) 
  • counta: "Retorna uma contagem do número de valores em um conjunto de dados"

    Nota: CountAconsidera ""ser um valor . Somente as células que estão em branco (pressione excluir em uma célula para esvaziá-la) não são contadas.

    Suporte do Google: https://support.google.com/docs/answer/3093991

  • countblank: "Retorna o número de células vazias em um determinado intervalo"

    Nota: CountBlankconsidera as células em branco (pressione delete para apagar uma célula) e as células que possuem uma fórmula que retorna ""como células vazias .

    Suporte do Google: https://support.google.com/docs/answer/3093403

Se você possui um intervalo que inclui fórmulas que resultam em "", você pode modificar sua fórmula de

=counta(range)

para:

=Counta(range) - Countblank(range)

EDIT: a função é countblank, não countblanks, o último dará um erro.


5
Infelizmente, isso não funciona para intervalos que incluem espaços em branco virgens e espaços calculados. (Subtrai os espaços em branco virgens não contados do valor da COUNTA.) #
— 224 Dávid Veszelovszki

3
Obrigado pelos votos negativos, o OP mencionou especificamente que o motivo de ele ter espaços em branco é devido à fórmula como = IF (1 = 2; ""; ""), e mencionei especificamente: "Se você tem um intervalo que inclui fórmulas que resultado em "" ... ""
— Delta_zulu 26/05

A questão é perguntar como contar as linhas em um intervalo. Você está contando as células em um intervalo?
— precisa saber é o seguinte

38

Aqui está o que eu acredito ser a melhor solução até agora:

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

Aqui está o porquê em 3 etapas fáceis

Etapa 1: Simples como torta - Adicionar coluna extra

A resposta do eniacAvenger produzirá a solução correta sem se preocupar com casos extremos , pois =A1<>""parece chegar ao valor correto de verdade / falsidade com base em como pensamos intuitivamente em células em branco, espaços em branco virgens ou espaços em branco criados.

Imagine que temos esses dados e queremos o Count of non-blank em 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   |

Se confiarmos na coluna C , poderíamos obter a contagem de valores em B assim:

=COUNTIF(C2:C6,True)

Etapa 2: use FormulaArraypara criar dinamicamente coluna extra

No entanto, o comentário de consideRatio é válido - se você precisar de uma coluna extra, geralmente poderá atingir o mesmo objetivo com o ArrayFormulaqual poderá criar uma coluna na memória sem ocupar espaço na folha.

Portanto, se queremos criar C dinamicamente, podemos usar uma fórmula de matriz como esta:

=ArrayFormula(B2:B6<>"")

Se simplesmente o colocarmos em C2, ele criaria a matriz vertical com um único toque da caneta:

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

Etapa 3: contar valores na coluna dinâmica

Mas com isso resolvido, não precisamos mais da coluna para exibir apenas os valores.

ArrayFormulavai resolver para o seguinte intervalo: {True,True,False,True,False}.
CountIfapenas aceita qualquer intervalo e, neste caso, pode contar o número de valores True.

Portanto, podemos envolver CountIfos valores produzidos ArrayFormuladesta maneira:

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

Leitura adicional

As outras soluções neste segmento são muito complexas ou falham em casos extremos que eu enumerei nesta folha de teste:

Planilha do Google - Teste CountA - Demo

Por que CountAfunciona da maneira vacilante, veja minha resposta aqui


4
Esta resposta é a única solução completa: conta com êxito apenas células com texto (incluindo espaço), números e valores VERDADEIRO / FALSO, excluindo espaços em branco gerados, células realmente vazias e erros (# N / A, #REF !, #VALUE , #NAME?). Ele também irá retornar 0, onde não existem valores
— spacepickle

2
Fiquei um pouco confuso ao ler isso e descobri acidentalmente que essa fórmula também funciona ... = CountIf (ArrayFormula (B2: B6 <> ""), TRUE) ... Por favor, não me interpretem mal, esta resposta é o melhor e deve ser votado mais.
— Twindham

2
@twindham, concordou que, em termos de construção dos blocos desta resposta, é provavelmente mais fácil manter intactos cada componente lógico e reordenar ArrayFormula(...)para retornar a matriz de valores dentro do CountIfque você sugeriu. Atualizei a resposta e a demonstração da planilha. Ambos farão a mesma coisa, mas a limpeza é próxima à bondade.
— precisa saber é o seguinte

A questão é perguntar como contar as linhas em um intervalo. Você está contando as células que não estão em branco em uma única coluna? Sua abordagem pode funcionar em várias colunas?
— precisa saber é

19

Para mim, nenhuma das respostas funcionou para intervalos que incluem células virgens e células vazias com base em uma fórmula (por exemplo =IF(1=2;"";""))

O que resolveu para mim é isso:

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


Ótima solução, caso uma colunab contenha formulários que retornem "" o valor! Muito obrigado
— user1561325

Infelizmente, parece que se Filter()não encontrar nenhum elemento, ele retornará o #N/Aque é COUNTA()tratado como um elemento e sempre retornará 1, mesmo que a contagem seja zero. Exemplo no Planilhas Google
— KyleMit 12/04

7
@KyleMit Você pode se livrar do problema de contagem zero pela adição de um valor constante para o intervalo e subtraindo 1 a partir da contagem com=COUNTA(filter({1;range},{1;range}<>"")) - 1
— spacepickle

A questão é perguntar como contar as linhas em um intervalo. Você está contando as células em um intervalo. Esse código quebra se você tentar aplicá-lo a um intervalo de linhas.
— AnnanFay

9

Resolvido usando uma solução que encontrei no Google por Yogi Anand: https://productforums.google.com/d/msg/docs/3qsR2m-1Xx8/sSU6Z6NYLOcJ

O exemplo abaixo conta o número de linhas não vazias no intervalo A3: C, lembre-se de atualizar os dois intervalos na fórmula com seu intervalo de interesse.

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

Além disso, evite dependências circulares, isso acontecerá se, por exemplo, você contar o número de linhas não vazias em A: C e colocar essa fórmula na coluna A ou C.


1
Encontrei uma solução muito mais limpa, publiquei como uma nova resposta.
— Dávid Veszelovszki

1
A única solução que responde à pergunta para contar o número de linhas com célula não vazia dentro e não contar o número de células não vazias em um intervalo.
— KpyM

7

É trabalho para mim:

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

Contagem de todas as células não vazias de F2 até o final da coluna


5

Dado o intervalo A:A, eu sugiro:

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

O problema é a contagem excessiva de COUNTA pelo número exato de células com cadeias de comprimento zero "" .

A solução é encontrar uma contagem exata dessas células. Isso pode ser encontrado procurando todas as células de texto e subtraindo todas as células de texto com pelo menos um caractere

  • COUNTA (A: A): células com valor, incluindo "" mas excluindo células realmente vazias
  • COUNTIF (A: A, "*"): células reconhecidas como texto, incluindo ""mas excluindo células realmente em branco
  • COUNTIF (A: A, "? *"): Células reconhecidas como texto com pelo menos um caractere

Isso significa que o valor COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")deve ser o número de células de texto menos o número de células de texto que possuem pelo menos um caractere, ou seja, a contagem de células contendo exatamente""


Usando folha de demonstração @KyleMit, eu encontrei esta fórmula ainda mais a contagem porque vai incluir quaisquer células com erros
— spacepickle

Há uma diferença entre uma célula que contém uma cadeia de comprimento zero e uma célula que não contém nada? É isso que faz as pessoas desconfiarem dos computadores. . . Você vê por que não podemos ter coisas boas?
— Cheeso

A questão é perguntar como contar as linhas em um intervalo. Você está contando as células em um intervalo?
— precisa saber é

5

Uma solução mais simples que funciona para mim:

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

Conta números, seqüências de caracteres, datas, etc. que não estão vazios


5
poderia ser simplificado em uma forma como = COUNTIF (A: A, "<>")
— Tom

A questão é perguntar como contar as linhas em um intervalo. Você está contando as células em um intervalo?
— precisa saber é

3

Tanto quanto posso ver, a maioria das soluções aqui conta o número de células não vazias, e não o número de linhas com células não vazias dentro.

Uma solução possível para a linha B3:E29é, por exemplo

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

Aqui ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1))retorna uma coluna de 0(se a linha estiver vazia) e 1(mais).

Outro é dado na resposta de consideRatio .


2

Você pode definir uma função personalizada usando o Apps Apps (Ferramentas> Editor de scripts) chamado por exemplo 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;
  }
}

E depois use-o em uma célula como esta =numNonEmptyRows(A23:C25)para contar o número de linhas não vazias no intervalo A23:C25;



1

Uma maneira muito flexível de fazer esse tipo de coisa é usar o ARRAYFORMULA.

Como um exemplo, imagine que você deseja contar cadeias não vazias (campos de texto), você pode usar este código:

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

O que acontece aqui é que "ArrayFormula" permite operar sobre um conjunto de valores. Usando a função SUM, você indica "ArrayFormula" para somar qualquer valor do conjunto. A cláusula "If" é usada apenas para verificar "vazio" ou "não vazio", 1 para não vazio e 0 caso contrário. "Len" retorna o comprimento dos diferentes campos de texto; é aí que você define o conjunto (intervalo) que deseja verificar. Finalmente, "ArrayFormula" somará 1 para cada campo dentro do conjunto (intervalo) no qual "len" retorna mais que 0.

Se você deseja verificar qualquer outra condição, basta modificar o primeiro argumento da cláusula IF.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.