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?

Robbit
fonte
6
CountA não funcionaria para você? Consulte também este thread do SO: stackoverflow.com/questions/12519073/…
Ozair Kafray 5/15
Possível duplicado de células contagem que contêm qualquer texto
Rubén

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

eniacAvenger
fonte
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.

Mike
fonte
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.

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

KyleMit
fonte
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 <> ""))

Dávid Veszelovszki
fonte
Ó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.

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

nomnom
fonte
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""

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

user300905
fonte
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 .

Kpym
fonte
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;

Kpym
fonte
2

No Planilhas Google, para contar o número de linhas que contêm pelo menos uma célula não vazia em um intervalo bidimensional :

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

Onde A1: C5 é o intervalo que você está verificando quanto a linhas não vazias.

A fórmula vem e é explicada no seguinte artigo da EXCELXOR - https://excelxor.com/2015/03/30/counting-rows-where-at-least-one-condition-is-met/

Will Rice
fonte
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.

Pablo
fonte