Análisis de datos

COUNTIF ARRAYFORMULA MONTH en Google Sheets (2026)

ModelMonkey21 de junio de 20267 min de lectura

El patrón aparece constantemente en cierres mensuales y desgloses de margen de contribución: tienes un log plano de transacciones y necesitas conteos por mes calendario sin agregar una columna auxiliar ni exportar a una tabla dinámica.

Por qué COUNTIF rechaza MONTH() directamente

El primer argumento de COUNTIF espera una referencia de rango, es decir, un bloque concreto de celdas como C2:C3001. Cuando pasas MONTH(C2:C3001) sin ARRAYFORMULA, Google Sheets evalúa MONTH solo contra la primera celda del rango. Obtienes un único entero (el mes de la fila 2), no un arreglo, así que el resultado de COUNTIF es 1 o 0 dependiendo de si esa fecha coincide con tu criterio.

ARRAYFORMULA fuerza la evaluación sobre todo el rango antes de que COUNTIF lo procese. El resultado es un arreglo real en memoria con enteros del 1 al 12, y COUNTIF hace la comparación de forma normal.

Cómo usar COUNTIF con ARRAYFORMULA(MONTH()) para generar 12 conteos mensuales

Para un solo mes:

=COUNTIF(ARRAYFORMULA(MONTH(Transacciones!C2:C3001)), 3)

Para una fila de resumen en un reporte de directorio donde B4:M4 contiene los números de mes del 1 al 12:

=COUNTIF(ARRAYFORMULA(MONTH(Transacciones!$C$2:$C$3001)), B4)

Arrastra hacia la derecha hasta M4. Cada celda toma el número de mes de su fila de encabezado y cuenta las filas de transacciones que coinciden. En 3,000 filas, recalcula los 12 meses en menos de un segundo.

Si quieres los 12 conteos desde una sola fórmula sin arrastrar, COUNTIF no puede iterar un arreglo de criterios de forma nativa. Usa MAP con LAMBDA (disponible en Google Sheets desde finales de 2023):

=MAP(ROW(INDIRECT("1:12")), LAMBDA(m,
  COUNTIF(ARRAYFORMULA(MONTH(Transacciones!$C$2:$C$3001)), m)
))

Esto derrama 12 valores verticalmente. Aplícale TRANSPOSE si tu fila de resumen corre en horizontal. Si necesitas compatibilidad con versiones anteriores a 2023, arrastra la fórmula de un solo mes: menos elegante, pero más fácil de auditar cuando el CFO pregunta cómo lo construiste.

Cómo corregir el bug de celdas vacías en fórmulas COUNTIF ARRAYFORMULA MONTH

Este error corrompe silenciosamente los números de enero en cualquier modelo que use rangos abiertos.

MONTH("") devuelve 1. Cada celda vacía en tu columna de fechas se cuenta como enero. En un rango de 3,000 filas donde 2,000 filas todavía están vacías (estás en Q1 del ejercicio fiscal 2026 y los datos corren hasta marzo), el conteo de enero queda inflado por 2,000.

La corrección con COUNTIFS:

=COUNTIFS(
  ARRAYFORMULA(MONTH(Transacciones!C2:C3001)), 3,
  Transacciones!C2:C3001, "<>"
)

El segundo criterio descarta fechas vacías antes de que corra la comparación de mes. El mismo enfoque funciona cuando arrastras por los 12 meses: solo bloquea las referencias de rango y reemplaza el 3 fijo por la celda de encabezado de mes correspondiente.

También puedes suprimir los vacíos dentro del propio ARRAYFORMULA:

=COUNTIF(
  ARRAYFORMULA(IF(Transacciones!C2:C3001<>"", MONTH(Transacciones!C2:C3001), "")),
  3
)

Ambos patrones funcionan. La versión con COUNTIFS mantiene la lógica de exclusión explícita y auditable, lo cual importa cuando alguien está rastreando una variación en enero.

SUMPRODUCT: cuándo abandonar COUNTIF ARRAYFORMULA

SUMPRODUCT resuelve el problema de celdas vacías y la extracción del mes en un solo paso, sin la capa intermedia de ARRAYFORMULA:

=SUMPRODUCT(
  (MONTH(Transacciones!$C$2:$C$3001)=3) *
  (Transacciones!$C$2:$C$3001<>"")
)

El rendimiento es comparable para conjuntos de datos menores a 10,000 filas. Por encima de 50,000 filas, SUMPRODUCT tiende a recalcular más rápido porque evalúa el arreglo internamente sin materializarlo como un objeto intermedio, comportamiento documentado en la referencia de la función SUMPRODUCT de Google Workspace. En logs de transacciones grandes, SUMPRODUCT puede ser entre 2 y 3 veces más rápido que una fórmula equivalente con COUNTIF más ARRAYFORMULA. El tope de la hoja es 10 millones de celdas, según la página oficial de límites de Google Sheets.

Para sumar en lugar de contar (ingresos por mes, no cantidad de transacciones):

=SUMPRODUCT(
  (MONTH(Transacciones!$C$2:$C$3001)=3) *
  (Transacciones!$C$2:$C$3001<>"") *
  Transacciones!$D$2:$D$3001
)

Donde la columna D es el monto de la transacción. Esta es la necesidad más común en FP&A de todas formas: el conteo generalmente es solo una verificación de sanidad sobre la suma.

Enfoque¿Seguro con celdas vacías?¿Derrame a 12 meses?Mejor para
COUNTIF(ARRAYFORMULA(MONTH()))No (usa COUNTIFS)Con MAP/LAMBDAConteos de transacciones, menos de 10k filas
COUNTIFS(ARRAYFORMULA(MONTH()), ..., rango, "<>")No (arrastra o MAP)Conteos mensuales auditables
SUMPRODUCT((MONTH()=m)*(rango<>""))No (arrastra)Conteos o sumas, cualquier tamaño de datos
MAP(ROW(INDIRECT("1:12")), LAMBDA(m, COUNTIF(...)))Depende de la fórmula internaDerrame de 12 meses para reporte de directorio

Cómo integrarlo en un modelo de múltiples pestañas

En un reporte trimestral para directorio, los conteos mensuales alimentan una pestaña de resumen que otras pestañas referencian. Una estructura limpia:

Pestaña Transacciones (datos crudos): fechas en columna C, montos en D, SKU o categoría en E.

Pestaña Resumen Mensual: números de mes del 1 al 12 en B5:B16, y luego:

=COUNTIFS(
  ARRAYFORMULA(MONTH(Transacciones!$C$2:$C$3001)), $B5,
  Transacciones!$C$2:$C$3001, "<>",
  Transacciones!$E$2:$E$3001, 'P&L'!$C$2
)

Esto cuenta transacciones en el mes $B5 donde la categoría coincide con lo que tengas en tu celda de supuestos del P&L. La pestaña de P&L luego jala:

=SUMIFS('Resumen Mensual'!D:D, 'Resumen Mensual'!B:B, ">=" & Supuestos!$B$3)

Dos referencias entre pestañas, todo bloqueado, sin columnas auxiliares. Cambia la fecha de una transacción y el P&L se actualiza. La trazabilidad va desde los datos crudos, pasa por el resumen mensual y llega al P&L sin nada oculto en un caché de tabla dinámica.

Si estás integrando esto en un modelo existente, Elige un plan de ModelMonkey.


Preguntas frecuentes

¿Por qué COUNTIF(MONTH(C2:C100), 3) devuelve 1 o 0 en vez de un conteo real?

Porque sin ARRAYFORMULA, Google Sheets evalúa MONTH() solo contra la primera celda del rango (C2) y devuelve un único entero. COUNTIF entonces compara ese entero con el criterio 3 y devuelve 1 si coincide o 0 si no. La solución es envolver la función de mes: =COUNTIF(ARRAYFORMULA(MONTH(C2:C100)), 3). Con ARRAYFORMULA, MONTH se evalúa contra todo el rango antes de que COUNTIF lo procese, y el conteo refleja todas las filas del mes.

¿Cómo evitar que las celdas vacías se cuenten como enero con ARRAYFORMULA(MONTH())?

MONTH("") devuelve 1, así que cualquier celda vacía en tu columna de fechas se registra como enero y puede inflar ese conteo significativamente. La corrección más legible es usar COUNTIFS con un segundo criterio que excluya vacíos: =COUNTIFS(ARRAYFORMULA(MONTH(C2:C3001)), 1, C2:C3001, "<>"). El segundo par de argumentos descarta las filas sin fecha antes de que corra la comparación de mes. Aplica el mismo patrón cuando arrastras la fórmula por los 12 meses: bloquea el rango con $ y reemplaza el número de mes fijo por la referencia de encabezado correspondiente.

¿Cuándo conviene usar SUMPRODUCT en lugar de COUNTIF con ARRAYFORMULA(MONTH())?

Usa SUMPRODUCT cuando tu dataset supere las 10,000 filas, cuando necesites excluir vacíos sin escribir COUNTIFS, o cuando además del conteo necesites una suma (por ejemplo, ingresos totales del mes). La fórmula =SUMPRODUCT((MONTH(C2:C3001)=3)*(C2:C3001<>"")) resuelve el problema de celdas vacías y la extracción del mes en un solo paso. Por encima de 50,000 filas, SUMPRODUCT puede ser entre 2 y 3 veces más rápido que COUNTIF con ARRAYFORMULA porque evalúa el arreglo internamente sin materializarlo como un objeto intermedio. Para datasets menores a 10,000 filas, ambos enfoques tienen un rendimiento prácticamente idéntico y la elección depende de cuál sea más fácil de auditar para tu equipo.

¿Cómo generar los 12 conteos mensuales desde una sola fórmula sin arrastrar?

Usa MAP con LAMBDA, disponible en Google Sheets desde finales de 2023: =MAP(ROW(INDIRECT("1:12")), LAMBDA(m, COUNTIF(ARRAYFORMULA(MONTH(Transacciones!$C$2:$C$3001)), m))). Esto derrama 12 valores verticalmente, uno por mes. Si tu tabla de resumen corre en horizontal, envuelve el resultado con TRANSPOSE. Para modelos que deban funcionar en versiones anteriores a 2023, la alternativa es arrastrar la fórmula de un solo mes por 12 celdas: menos compacto, pero completamente auditable sin conocer MAP ni LAMBDA.