En resumen —
ROWS(matriz)devuelve cuántas filas tiene un rango o matriz, yCOLUMNS(matriz)devuelve cuántas columnas.ROWS(A1:A10)es10;COLUMNS(A1:C1)es3. Las formas en plural miden un tamaño; las singulares ROW y COLUMN informan de una posición — una diferencia de una letra que cambia por completo la respuesta. La recompensa son fórmulas que se redimensionan solas: un índice de columna deVLOOKUPque sigue siendo correcto cuando insertas una columna, un recuento de las filas que devolvió unFILTER, y "la última fila" sin fijar un número a mano.
=ROWS(A1:A10) ' -> 10 cuántas filas hay en el rango
=COLUMNS(A1:C1) ' -> 3 cuántas columnas hay en el rango
=ROWS(A1:C10) ' -> 10 sigue siendo 10 — cuenta filas, ignora el ancho
=COLUMNS($A$1:C$1) ' -> 3 al arrastrar el extremo crece: 1, 2, 3, ...
=ROWS(FILTER(data, keep)) ' -> 42 cuántas filas devolvió el filtro
=ROWS(A:A) ' -> 1048576 una columna entera — el recuento físico de filas
Nota — nombres de funciones en Excel en español. En la interfaz en español, las funciones aparecen así: ROWS → FILAS, COLUMNS → COLUMNAS, ROW → FILA, COLUMN → COLUMNA, VLOOKUP → BUSCARV, INDEX → INDICE, MATCH → COINCIDIR, FILTER → FILTRAR, COUNTA → CONTARA, SEQUENCE → SECUENCIA. Los errores se muestran traducidos:
#REF!→ #¡REF!,#VALUE!→ #¡VALOR!,#N/A→ #N/D. En los bloques de código de abajo mantenemos los nombres en inglés a propósito: funcionan en todas las versiones y son los términos por los que se busca.
ROWS y COLUMNS parecen trivialidades hasta que te das cuenta de cuánta lógica frágil y
fijada a mano — "hay 3 columnas / los datos terminan en la fila 200" — sustituyen. Convierten un
número fijo que un compañero romperá en un valor que Excel recalcula a partir del propio rango.
El truco está en no confundirlas con sus primas en singular.
Lo que vas a aprender
- El modelo mental:
ROWS/COLUMNSmiden tamaño, no posición - La trampa de una letra: por qué
ROW(A1:A10)yROWS(A1:A10)devuelven cosas distintas - El uso estrella: un índice de columna de
VLOOKUPque sobrevive a columnas insertadas - Contar las filas que produjo una matriz dinámica o un
FILTER - Encontrar la última fila / el punto medio de un rango sin fijarlo a mano
- La trampa de la columna entera donde
ROWS(A:A)supera el millón
El modelo mental: tamaño, no posición
El plural lo cuenta todo. ROW y COLUMN responden a ¿dónde está esta celda? — te devuelven
una coordenada. ROWS y COLUMNS responden a una pregunta distinta: ¿qué tamaño tiene este
bloque? — te devuelven un recuento. A ROWS(A1:A10) no le importa qué hay en el rango ni dónde
está; informa de que el rango abarca 10 filas. COLUMNS(A1:C1) informa de 3 columnas.
Por eso ROWS(A1:C10) es 10, no 30: cuenta filas, y el rango tiene diez filas de alto por
más que sea tres columnas de ancho. Las dos funciones son una cinta métrica para un rectángulo —
una da la altura, la otra el ancho. Como sus primas en singular, no son volátiles, y miden
con gusto una referencia de rango o una matriz literal (ROWS({1;2;3}) es 3), lo que las
convierte en una forma barata y estable de pasar un tamaño a otra función.
La trampa de una letra: ROW vs ROWS
Esta es la confusión que merece la pena grabarte a fuego, porque falla en silencio dentro de las fórmulas matriciales:
=ROW(A1:A10) ' -> {1;2;3;4;5;6;7;8;9;10} una MATRIZ de posiciones (singular)
=ROWS(A1:A10) ' -> 10 un único RECUENTO (plural)
ROW en singular, dado un rango, devuelve un número por fila — una lista derramada de
coordenadas. ROWS en plural devuelve un único total. En una celda normal la diferencia es
obvia, pero mete la incorrecta en INDEX, SEQUENCE o un SUMPRODUCT y obtendrás una
respuesta equivocada sin ningún error que te avise — SEQUENCE(ROW(data)) intenta construir una
secuencia de la longitud equivocada, mientras que SEQUENCE(ROWS(data)) construye una fila por
cada fila de datos, como se pretendía. Cuando quieres decir "cuántas", es el plural. Cuando
quieres decir "cuál", es el singular.
El uso estrella: un índice de columna de VLOOKUP que nunca se rompe
Lo más valioso que hace COLUMNS es lograr que VLOOKUP
sobreviva a las ediciones. El tercer argumento de VLOOKUP es un número fijo — devuelve la
columna 2, o la 3, o la 4 — y ese número es justo lo que se rompe cuando alguien inserta una
columna en la tabla. Sustitúyelo por COLUMNS y se recalcula:
=VLOOKUP($A2, Prices, COLUMNS($B$1:B$1), FALSE) ' primera col de resultado -> índice 2
' arrastra a la derecha: COLUMNS($B$1:C$1) -> 3, COLUMNS($B$1:D$1) -> 4, ...
Ancla el borde izquierdo ($B$1) y deja que el derecho se desplace mientras arrastras: el rango
se ensancha una columna en cada paso, así que COLUMNS cuenta 2, 3, 4… y le pasa a VLOOKUP un
índice que sube solo. Como el índice ahora se deriva de la hoja en vez de escribirse, insertar
una columna desplaza todo de forma coherente y las búsquedas siguen apuntando a los campos
correctos. Esta es toda la razón de ser de las funciones en plural: un tamaño que se ajusta
gana a un número que tienes que acordarte de arreglar. (En Excel 365,
INDEX/MATCH o XLOOKUP se saltan el índice por completo — pero para
los millones de VLOOKUP que ya andan sueltos por ahí, COLUMNS es el endurecimiento más barato
que puedes añadir.)
Contar una matriz dinámica o un resultado filtrado
Envuelve ROWS alrededor de una fórmula derramada y obtienes "¿cuántas devolvió eso?" — a
menudo de forma más directa que una variante de COUNT:
=ROWS(FILTER(Orders, Region="West")) ' cuántos pedidos de la región Oeste coincidieron
=ROWS(UNIQUE(Customers)) ' cuántos clientes distintos
=COLUMNS(A1#) ' qué ancho tiene un rango derramado (el operador #)
ROWS(FILTER(...)) responde a "cuántos registros cumplen la condición" midiendo el propio
resultado — sin un COUNTIFS aparte que tengas que mantener sincronizado con los criterios del
filtro. Apuntar ROWS/COLUMNS a una referencia de derrame (A1#) te dice las dimensiones
vivas de una matriz dinámica según crece y encoge. El modelo mental se mantiene: estás midiendo
el tamaño de lo que produjo la fórmula interna.
Última fila, punto medio y tamaño del rango sin fijarlo a mano
Como ROWS da la altura de un rango, es la forma limpia de llegar al último elemento o al
medio de un rango que no para de cambiar de tamaño:
=INDEX(data, ROWS(data)) ' el ÚLTIMO valor de un rango de 1 columna
=INDEX(data, ROWS(data)/2) ' aproximadamente el punto medio
=INDEX(data, ROWS(data)-1) ' el penúltimo valor
INDEX(data, ROWS(data)) se lee como "el elemento en la posición recuento" — es decir, el
último — y sigue siendo correcto cuando el rango crece, donde un INDEX(data, 200) fijo a mano
se pierde en silencio las filas nuevas o apunta más allá del final. El fallo que ROWS previene
es el recuento de filas escrito a mano que todos olvidan actualizar después de que los datos se
expanden.
La trampa de la columna entera: ROWS(A:A) es 1.048.576
Un detalle que interiorizar: ROWS y COLUMNS cuentan el tamaño físico de lo que les des,
no cuánto está relleno.
=ROWS(A:A) ' -> 1048576 todas las filas de la columna existen, rellenas o no
=COLUMNS(A:A) ' -> 1 la columna A tiene exactamente una columna de ancho
=COLUMNS(A:C) ' -> 3
ROWS(A:A) es la altura completa de la hoja — más de un millón — porque la referencia es la
columna entera. Eso casi nunca es "cuántas filas de datos tengo"; para eso quieres
COUNTA (celdas no vacías) o un recuento por
derrame/FILTER. Confundir la dimensión física de una referencia de columna entera con el
recuento de filas usadas es la única forma en que estas funciones sorprenden a la gente — mantén
separado "qué tamaño tiene esta referencia" de "cuánto está relleno".
El criterio a aplicar
Recurre a las formas en plural siempre que estés a punto de fijar una dimensión a mano. Un
índice de VLOOKUP escrito como 4, un "los datos terminan en la fila 500" que un compañero
invalidará la semana que viene, un "hay 12 meses a lo ancho" — cada uno es un ROWS/COLUMNS
esperando a nacer, y cada uno se vuelve autoajustable en cuanto lo derivas del rango en lugar de
escribirlo. El único peligro real es la confusión singular/plural: si tu fórmula empezó a
devolver una matriz derramada sospechosamente larga donde esperabas un solo número, casi seguro
escribiste ROW donde querías ROWS. Mide tamaños con el plural, lee posiciones con el
singular, y los números fijados a mano desaparecen de tus modelos.
Cómo ayuda ExcelMaster
El índice de VLOOKUP basado en COLUMNS es esa clase de endurecimiento que la gente sabe que
debería hacer y casi nunca se molesta en aplicar. Pídele a ExcelMaster "haz que este
VLOOKUP sobreviva a columnas insertadas" y reescribe el tercer argumento como un
COLUMNS($B$1:B$1) anclado que sube al arrastrar — u ofrece la versión INDEX/MATCH si estás en
una compilación moderna. Pregunta "cuántas filas devolvió mi filtro" y envuelve el resultado en
ROWS(...) en vez de atornillar un segundo COUNTIFS que tendrías que mantener sincronizado. Y
si pegas una fórmula que confunde ROW y ROWS, detecta el desliz singular-frente-a-plural
antes de que se convierta en un silencioso desfase de mil.
Preguntas frecuentes
¿Qué hace la función ROWS en Excel?
ROWS(matriz) devuelve el número de filas de un rango o matriz. =ROWS(A1:A10) devuelve 10,
y =ROWS(A1:C10) también devuelve 10 porque el rango tiene diez filas de alto sin importar su
ancho. Mide un tamaño, a diferencia de ROW, que devuelve el número de fila de una celda.
¿Cuál es la diferencia entre ROW y ROWS (y COLUMN vs COLUMNS)?
El plural cuenta, el singular localiza. ROWS(A1:A10) devuelve 10 (cuántas filas);
ROW(A1:A10) devuelve la matriz {1;2;…;10} (el número de cada fila). Usa ROWS/COLUMNS
cuando necesites un tamaño, y ROW/COLUMN cuando necesites una
posición.
¿Cómo cuento el número de columnas de un rango?
Usa =COLUMNS(rango). =COLUMNS(A1:F1) devuelve 6. Para contar cuántas columnas de datos
están realmente rellenas en una fila, combínalo con un COUNTA, pero para el ancho de un rango
definido COLUMNS es exacto.
¿Cómo hace COLUMNS que una fórmula VLOOKUP sea más robusta?
Sustituye el tercer argumento fijado a mano de VLOOKUP por un COLUMNS($B$1:B$1) anclado. A
medida que arrastras la fórmula a la derecha, el rango se ensancha y COLUMNS devuelve
2, 3, 4…, así que el índice de columna sube automáticamente y sigue funcionando cuando se
insertan columnas — sin renumerar a mano.
¿Por qué ROWS(A:A) devuelve 1.048.576?
Porque una referencia de columna entera es todas las filas de la hoja, y las hojas de Excel
tienen 1.048.576 filas. ROWS/COLUMNS informan del tamaño físico de la referencia, no de
cuántas celdas están rellenas. Para el recuento de filas usadas, usa COUNTA(A:A) o un resultado
de FILTER.
Probado en
Probado en: Excel 365 (Windows 11) — última verificación el 2026-07-13.
Guías relacionadas: Excel FILA y COLUMNA · Excel HIPERVINCULO · Excel BUSCARV · INDICE y COINCIDIR · Excel FILTRAR
