Contar filas con valor no vacío

128

En una hoja de cálculo de Google: ¿cómo puedo contar las filas de un área determinada que tienen un valor? Todas las sugerencias sobre esto que encontré hasta ahora conducen a fórmulas que cuentan las filas que tienen un contenido no vacío (incluida la fórmula), pero una celda con

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

También se cuenta.

¿Cuál es la solución a esta simple tarea?

Robbit
fuente
66
¿CountA no funcionaría para ti? También vea este hilo SO: stackoverflow.com/questions/12519073/…
Ozair Kafray
Posible duplicado de las celdas Count que contienen cualquier texto
Rubén

Respuestas:

-12

Haga otra columna que determine si la celda referenciada está en blanco usando la función "CountBlank". Luego use count en los valores creados en la nueva columna "CountBlank".

eniacAvenger
fuente
3
Considero esto como una declaración clara de que no hay otra solución para esto. Muchas gracias.
Robbit
Cuando necesite agregar otra columna, casi siempre puede resolverlo usando algunas fórmulas adicionales como contener un concatenado / división / unión, etc., me pondré en contacto con usted si lo resuelvo.
consideRatio
Por ejemplo, la siguiente línea forma una sola fila de un rango de celdas 2d, que a menudo puede resolver muchos problemas: = split (ArrayFormula (concatenate (C3: O4 & ";")), ";") --- -
seguiré
He publicado una respuesta que resuelve el objetivo sin depender de columnas separadas
Consideratio
203

Acabo de usar =COUNTIF(Range, "<>")y contó celdas no vacías para mí.

Miguel
fuente
14
Desafortunadamente, esta fórmula también cuenta celdas con fórmulas de resultados en blanco.
Dávid Veszelovszki
23
Tuve el mismo problema que @ DávidVeszelovszki [se contaron las fórmulas]. =COUNTIF(Range,"?*")
Resolví
La pregunta es cómo contar las filas en un rango. ¿Estás contando las celdas en un rango?
AnnanFay
124
=counta(range) 
  • counta: "Devuelve un recuento del número de valores en un conjunto de datos"

    Nota: CountAconsidera ""que es un valor . Solo las celdas que están en blanco (presione eliminar en una celda para dejarlo en blanco) no se cuentan.

    Soporte de Google: https://support.google.com/docs/answer/3093991

  • countblank: "Devuelve el número de celdas vacías en un rango dado"

    Nota: CountBlankconsidera las celdas en blanco (presione eliminar para dejar en blanco una celda) y las celdas que tienen una fórmula que vuelve ""a ser celdas vacías .

    Soporte de Google: https://support.google.com/docs/answer/3093403

Si tiene un rango que incluye fórmulas que dan como resultado "", puede modificar su fórmula desde

=counta(range)

a:

=Counta(range) - Countblank(range)

EDITAR: la función es countblank, no countblanks, la última dará un error.

Delta_zulu
fuente
55
Desafortunadamente, esto no funciona para rangos que incluyen espacios en blanco vírgenes y espacios en blanco calculados. (Resta los blancos vírgenes no contados del valor de COUNTA.)
Dávid Veszelovszki
3
Gracias por los dulces votos negativos, el OP mencionó específicamente que la razón por la que tiene espacios en blanco se debe a una fórmula como = IF (1 = 2; ""; ""), y mencioné específicamente: "Si tiene un rango que incluye fórmulas que dar lugar a "" ..."
Delta_zulu
La pregunta es cómo contar las filas en un rango. ¿Estás contando las celdas en un rango?
AnnanFay
38

Esto es lo que creo que es la mejor solución hasta ahora:

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

He aquí por qué en 3 sencillos pasos

Paso 1: simple como un pastel: agregue una columna adicional

La respuesta de eniacAvenger proporcionará la solución correcta sin preocuparse por los casos límite, ya que =A1<>""parece llegar al valor correcto de verdad / falsedad en función de cómo pensamos intuitivamente en las celdas en blanco, ya sea en blanco virgen o en blanco creado.

Así que imagine que tenemos estos datos y queremos el recuento de no espacios en blanco en 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   |

Si confiamos en la Columna C , podríamos obtener el recuento de valores en B así:

=COUNTIF(C2:C6,True)

Paso 2: Úselo FormulaArraypara crear dinámicamente Columna adicional

Sin embargo, el comentario de consideRatio es válido: si necesita una columna adicional, a menudo puede lograr el mismo objetivo con el ArrayFormulaque puede crear una columna en la memoria sin ocupar espacio en la hoja.

Entonces, si queremos crear C dinámicamente, podemos usar una fórmula de matriz como esta:

=ArrayFormula(B2:B6<>"")

Si simplemente lo ponemos en C2, crearía la matriz vertical con un solo trazo del lápiz:

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

Paso 3: contar valores en una columna dinámica

Pero con eso resuelto, ya no necesitamos que la columna simplemente muestre los valores.

ArrayFormularesolverá de la siguiente gama: {True,True,False,True,False}.
CountIfsolo toma cualquier rango y en este caso puede contar el número de valores verdaderos.

Entonces podemos ajustar CountIflos valores producidos de ArrayFormulaesta manera:

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

Otras lecturas

Las otras soluciones en este hilo son demasiado complejas o fallan en casos extremos particulares que he enumerado en esta hoja de prueba:

Hoja de cálculo de Google - Prueba CountA - Demo

Para CountAsaber por qué funciona de la manera más inestable, vea mi respuesta aquí

KyleMit
fuente
44
Esta respuesta es la única solución completa: cuenta con éxito solo las celdas con texto (incluido el espacio), números y valores VERDADERO / FALSO al tiempo que excluye espacios en blanco generados, celdas realmente vacías y errores (# N / A, #REF !, #VALUE , #¿NOMBRE?) . También devolverá 0 donde no hay valores
spacepickle
2
Me confundí un poco al leer esto, y descubrí accidentalmente que esta fórmula también funciona ... = CountIf (ArrayFormula (B2: B6 <> ""), TRUE) ... Por favor, no me malinterpretes, esta respuesta es el mejor, y debería ser votado más.
twindham
2
@twindham, estuvo de acuerdo, que en términos de construir los bloques de esta respuesta, probablemente sea más fácil mantener intacto cada componente lógico y reordenar ArrayFormula(...)para devolver la matriz de valores dentro de CountIflo sugerido. He actualizado la respuesta y la demostración de la hoja de cálculo. Ambos harán lo mismo, pero la limpieza está al lado de la bondad.
KyleMit
La pregunta es cómo contar las filas en un rango. ¿Estás contando las celdas que no están en blanco en una sola columna? ¿Su enfoque puede funcionar en varias columnas?
AnnanFay
19

Para mí, ninguna de las respuestas funcionó para rangos que incluyen tanto celdas vírgenes como celdas vacías según una fórmula (por ejemplo =IF(1=2;"";""))

Lo que me resolvió es esto:

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

Dávid Veszelovszki
fuente
¡Gran solución en caso de que una columnab contenga formularios que devuelvan el "" valor! Muchas gracias
user1561325
Desafortunadamente, parece que si Filter()no encuentra ningún elemento, devolverá lo #N/Aque se COUNTA()trata como un elemento y, por lo tanto, siempre devolverá 1, incluso si el recuento debe ser cero. Ejemplo en Hojas de cálculo de Google
KyleMit
77
@KyleMit Puede deshacerse del problema del conteo cero agregando un valor constante al rango y restando 1 del conteo con=COUNTA(filter({1;range},{1;range}<>"")) - 1
spacepickle
La pregunta es cómo contar las filas en un rango. Estás contando las celdas en un rango. Este código se rompe si intenta aplicarlo a un rango de filas.
AnnanFay
9

Resuelto usando una solución que encontré en Google de Yogi Anand: https://productforums.google.com/d/msg/docs/3qsR2m-1Xx8/sSU6Z6NYLOcJ

El siguiente ejemplo cuenta el número de filas no vacías en el rango A3: C, recuerde actualizar ambos rangos en la fórmula con su rango de interés.

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

También asegúrese de evitar dependencias circulares, sucederá si, por ejemplo, cuenta el número de filas no vacías en A: C y coloca esta fórmula en la columna A o C.

consideraRatio
fuente
1
Encontré una solución mucho más limpia, la publiqué como una nueva respuesta.
Dávid Veszelovszki
1
La única solución que responde a la pregunta es contar el número de filas con celdas no vacías dentro, y no contar el número de celdas no vacías en un rango.
Kpym
7

Es trabajo para mi:

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

Recuento de todas las celdas no vacías desde F2 hasta el final de la columna.

nomnom
fuente
5

Dado el rango A:A, sugeriría:

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

El problema es que COUNTA cuenta en exceso exactamente por el número de celdas con cadenas de longitud cero "".

La solución es encontrar un recuento de exactamente estas células. Esto se puede encontrar buscando todas las celdas de texto y restando todas las celdas de texto con al menos un carácter

  • COUNTA (A: A): celdas con valor, que incluyen ""pero excluyen celdas verdaderamente vacías
  • COUNTIF (A: A, "*"): celdas reconocidas como texto, que incluyen ""pero excluyen celdas verdaderamente en blanco
  • COUNTIF (A: A, "? *"): Celdas reconocidas como texto con al menos un carácter

Esto significa que el valor COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")debe ser el número de celdas de texto menos el número de celdas de texto que tienen al menos un carácter, es decir, el recuento de celdas que contienen exactamente""

espinazo
fuente
Usando la hoja de demostración @KyleMit, encontré que esta fórmula todavía supera los conteos porque incluirá cualquier celda con errores
spacepickle
¿Hay alguna diferencia entre una celda que contiene una cadena de longitud cero y una celda que no contiene nada? Esto es lo que hace que las personas desconfíen de las computadoras. . . ¿Ves por qué no podemos tener cosas buenas?
Cheeso
La pregunta es cómo contar las filas en un rango. ¿Estás contando las celdas en un rango?
AnnanFay
5

Una solución más simple que funciona para mí:

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

Cuenta tanto números, cadenas, fechas, etc. que no están vacíos

user300905
fuente
55
podría simplificarse en una forma como = COUNTIF (A: A, "<>")
Tom
La pregunta es cómo contar las filas en un rango. ¿Estás contando las celdas en un rango?
AnnanFay
3

Hasta donde puedo ver, la mayoría de las soluciones aquí cuentan el número de celdas no vacías, y no el número de filas con celdas no vacías dentro.

Una posible solución para el rango B3:E29es por ejemplo

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

Aquí ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1))devuelve una columna de 0(si la fila está vacía) y 1(más).

Otro se da en consideración la respuesta de Radio .

Kpym
fuente
2

Puede definir una función personalizada utilizando Apps Script (Herramientas> Editor de script) llamado, por ejemplo 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;
  }
}

Y luego úselo en una celda como esta =numNonEmptyRows(A23:C25)para contar el número de filas no vacías en el rango A23:C25;

Kpym
fuente
2

En Hojas de cálculo de Google, para contar el número de filas que contienen al menos una celda no vacía dentro de un rango bidimensional :

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

Donde A1: C5 es el rango que está buscando para filas no vacías.

La fórmula proviene y se explica en el siguiente artículo de EXCELXOR: https://excelxor.com/2015/03/30/counting-rows-where-at-least-one-condition-is-met/

Will Rice
fuente
1

Una forma muy flexible de hacer ese tipo de cosas es usar ARRAYFORMULA.

Como ejemplo, imagine que desea contar cadenas no vacías (campos de texto), puede usar este código:

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

Lo que sucede aquí es que "ArrayFormula" le permite operar sobre un conjunto de valores. Usando la función SUMA indica "ArrayFormula" para sumar cualquier valor del conjunto. La cláusula "If" solo se usa para marcar "vacío" o "no vacío", 1 para no vacío y 0 en caso contrario. "Len" devuelve la longitud de los diferentes campos de texto, allí es donde define el conjunto (rango) que desea verificar. Finalmente, "ArrayFormula" sumará 1 por cada campo dentro del conjunto (rango) en el que "len" devuelve más de 0.

Si desea verificar cualquier otra condición, simplemente modifique el primer argumento de la cláusula IF.

Pablo
fuente