Fórmula de Excel: CONTAR.SI con rango variable -

Resumen

Para configurar COUNTIFS (o COUNTIF) con un rango variable, puede usar la función OFFSET. En el ejemplo que se muestra, la fórmula en B11 es:

=COUNTIFS(OFFSET(B$5,0,0,ROW()-ROW(B$5)-1,1),"")

Esta fórmula cuenta las celdas que no están en blanco en un rango que comienza en B5 y termina 2 filas por encima de la celda donde reside la fórmula. La misma fórmula se copia y pega 2 filas debajo de la última entrada en los datos como se muestra.

Explicación

En el ejemplo que se muestra, la fórmula en B11 es:

=COUNTIFS(OFFSET(B$5,0,0,ROW()-ROW(B$5)-1,1),"")

Trabajando desde adentro hacia afuera, el trabajo de configurar un rango variable se realiza mediante la función OFFSET aquí:

OFFSET(B$5,0,0,ROW()-ROW(B$5)-1,1) // variable range

OFFSET tiene cinco argumentos y se configura así:

  • referencia = B $ 5, comience en la celda B5, fila bloqueada
  • filas = 0, compensar cero filas desde la celda inicial
  • cols = 0, compensar cero columnas de celda inicial
  • altura = FILA () - FILA (B $ 5) -1 = 5 filas de altura
  • ancho = 1 columna de ancho

Para calcular la altura del rango en filas, usamos la función FILA como esta:

ROW()-ROW(B$5)-1 // work out height

Dado que ROW () devuelve el número de fila de la celda "actual" (es decir, la celda en la que vive la fórmula), podemos simplificar así:

=ROW()-ROW(B$5)-1 =11-5-1 =5

Con la configuración anterior, OFFSET devuelve el rango B5: B9 directamente a COUNTIFS:

=COUNTIFS(B5:B9,"") // returns 4

Observe que la referencia a B $ 5 en la fórmula anterior es una referencia mixta, con la columna relativa y la fila bloqueada. Esto permite que la fórmula se copie en otra columna y siga funcionando. Por ejemplo, una vez copiada a C12, la fórmula es:

=COUNTIFS(OFFSET(C$5,0,0,ROW()-ROW(C$5)-1,1),"")

Nota: OFFSET es una función volátil y puede causar problemas de rendimiento en hojas de trabajo grandes o complejas.

Con INDIRECTO y DIRECCION

Otro enfoque es utilizar una fórmula basada en las funciones INDIRECTO y DIRECCIÓN. En este caso, ensamblamos un rango como texto, luego usamos INDIRECTO para evaluar el texto como referencia. La fórmula en B11 sería:

=COUNTIFS(INDIRECT(ADDRESS(5,COLUMN())&":"&ADDRESS(ROW()-2,COLUMN())),"")

La función ADDRESS se usa para construir un rango como este:

ADDRESS(5,COLUMN())&":"&ADDRESS(ROW()-2,COLUMN())

En la primera instancia de ADDRESS, proporcionamos el número de fila como el valor codificado 5 y proporcionamos el número de columna con la función COLUMN:

=ADDRESS(5,COLUMN()) // returns "$B$5"

En el segundo caso, proporcionamos el número de fila "actual" menos 2, y la columna actual con la función COLUMNA:

=ADDRESS(ROW()-2,COLUMN()) // returns "$B$9"

Después de concatenar estos dos valores juntos, tenemos:

"$B$5:$B$9" // as text

Tenga en cuenta que esta es una cadena de texto. Para convertir a una referencia válida, necesitamos usar INDIRECTO:

=INDIRECT("$B$5:$B$9") // returns $B$5:$B$9 as valid range

Finalmente, la fórmula en B11 se convierte en:

=COUNTIFS($B$5:$B$9,"") // returns 4

Nota: INDIRECTO es una función volátil y puede causar problemas de rendimiento en hojas de trabajo grandes o complejas.

Articulos interesantes...