En resumen —
ROW([referencia])devuelve el número de fila de una celda, yCOLUMN([referencia])devuelve su número de columna — una posición, no el valor almacenado allí.ROW(A10)es10;COLUMN(C1)es3. Omite el argumento y cada una devuelve la coordenada de la celda que contiene la fórmula:=ROW()en la celda A5 es5. Esa única idea — estas funciones leen una dirección, no un valor — impulsa todo lo útil que hacen: números de serie que se renumeran solos cuando insertas una fila, sombreado tipo cebra conMOD(ROW(),2), y la posición que alimenta aINDEXy a las fórmulas matriciales.
=ROW() ' -> 5 la fila en la que está esta fórmula (aquí, la fila 5)
=ROW(A10) ' -> 10 el número de fila de A10 (no su contenido)
=COLUMN() ' -> 3 la columna en la que está esta fórmula (col C)
=COLUMN(D1) ' -> 4 D es la 4ª columna
=ROW()-ROW($A$2)+1 ' -> 1,2,3 número de serie autorreparable, anclado en A2
=MOD(ROW(),2)=0 ' -> TRUE/FALSE una fila sí y otra no, para el sombreado
Nota — nombres de funciones en Excel en español. En la interfaz en español, las funciones aparecen así: ROW → FILA, COLUMN → COLUMNA, MOD → RESIDUO, INT → ENTERO, INDEX → INDICE, MATCH → COINCIDIR, ADDRESS → DIRECCION, SUBSTITUTE → SUSTITUIR, OFFSET → DESREF, INDIRECT → INDIRECTO, FILTER → FILTRAR, 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.
ROW y COLUMN son las dos funciones que la gente usa sin llegar nunca a decidir aprenderlas
— copias una fórmula de número de serie de internet, funciona, y sigues adelante. Pero
responden a una pregunta que ninguna otra función responde: dónde está esta celda, y qué
tamaño tiene este rango. Separa en tu cabeza "la posición de una celda" de "el valor de una
celda" y se te abre toda una categoría de fórmulas dinámicas que se autoajustan.
Lo que vas a aprender
- El modelo mental: ROW y COLUMN devuelven coordenadas, no el contenido de las celdas
- Por qué
ROW()a secas devuelve la propia fila de la fórmula — y por qué esa es la parte útil - La confusión número uno:
ROW(C10)es10, no el valor de C10 - Números de serie autorreparables con
ROW()-ROW(ancla)+1 - Sombreado y lógica de cada n filas con
MOD(ROW(), n) - La trampa letra-vs-número de COLUMN, y ROW como motor oculto dentro de
INDEX
El modelo mental: coordenadas, no contenido
Casi todas las funciones de Excel leen lo que hay dentro de las celdas — SUM suma sus
valores, VLOOKUP busca un valor, TEXT reformatea uno. ROW y COLUMN son el par raro que
ignora por completo el contenido e informa de la dirección: qué fila, qué columna.
Piénsalas como una celda que pregunta "¿dónde estoy en la cuadrícula?" en lugar de "¿qué
contengo?".
Ambas admiten una referencia opcional. ROW(A10) devuelve 10 porque A10 está en la fila 10;
COLUMN(C1) devuelve 3 porque C es la tercera columna. Omite el argumento y la función
informa de su propia ubicación — =ROW() escrita en A5 devuelve 5, y devolverá 6 en
cuanto la arrastres una celda hacia abajo. Esa autorreferencia no es una rareza que haya que
sortear; es justamente el objetivo, y es lo que hace útil a ROW como contador.
Una tranquilidad de entrada: a diferencia de OFFSET e INDIRECT, ROW y COLUMN no son volátiles. No se recalculan con cada pulsación de tecla, así que puedes esparcir miles de ellas por un modelo sin la ralentización que traen esas dos funciones de referencia.
ROW() a secas devuelve la propia fila de la fórmula
Escribe =ROW() en cualquier celda y obtienes el número de la fila en la que vive. Arrástrala
hacia abajo y los resultados van subiendo — 2, 3, 4, … — porque cada copia informa de su
propia nueva fila. Este es el mecanismo que hay detrás de casi todas las recetas de "numera
mis filas automáticamente".
=ROW() ' en A2 -> 2, en A3 -> 3, en A4 -> 4 (cada copia informa de su propia fila)
=COLUMN() ' en B1 -> 2, en C1 -> 3, en D1 -> 4 (COLUMN cuenta a lo ancho)
El inconveniente con el que chocarás enseguida: si tus datos empiezan en la fila 2 (porque la
fila 1 es un encabezado), =ROW() te da 2, 3, 4 — desfasado en uno. Eso no es un error de
ROW; es ROW diciéndote la verdad literal sobre dónde está. La solución es anclarla, que es la
siguiente sección.
La confusión nº1: ROW(referencia) es una posición, no un valor
Aquí está el error que manda a la gente a los buscadores: escriben =ROW(C10) esperando el
contenido de C10 y obtienen 10 en su lugar.
=ROW(C10) ' -> 10 el NÚMERO DE FILA de C10, nunca lo que hay guardado en C10
A ROW se le preguntó "¿en qué fila está C10?" y respondió con honestidad: la fila 10. Nunca
mira dentro de la celda. Si quieres el valor en una posición calculada, ese es el trabajo de
INDEX — INDEX toma un número de fila (a menudo uno que produjo
ROW o MATCH) y devuelve el contenido. Mantén la división nítida:
ROW/COLUMN encuentran la coordenada; INDEX convierte una coordenada en un valor. Casi toda
pregunta del tipo "ROW no devuelve lo que esperaba" se disuelve en cuanto sostienes esa línea.
Números de serie autorreparables: ROW() menos un ancla
El uso más valioso de ROW, sin discusión, es un número de serie que sobrevive a filas
insertadas y eliminadas. Un 1, 2, 3 escrito a mano se rompe en el instante en que alguien
inserta una fila en medio; un número basado en ROW simplemente se renumera solo.
=ROW()-ROW($A$2)+1 ' en la fila donde empiezan los datos (A2), esto es 1; A3 -> 2; A4 -> 3
=ROW()-1 ' atajo cuando tu encabezado es exactamente la fila 1
Léelo a través del modelo mental: ROW() es esta fila, ROW($A$2) es la fila fija donde
empieza tu lista, y restar da el desplazamiento desde el inicio; +1 lo hace de base 1. Como
el ancla es una referencia absoluta ($A$2), se queda quieta cuando copias hacia abajo, y como
ROW vuelve a leer la posición viva, insertar una fila en cualquier punto de la lista renumera
todo lo que hay debajo automáticamente. Ese es el fallo que existe para matar: series
manuales que en silencio pasan a 1, 2, 3, 3, 4 tras una inserción y nadie lo nota hasta una
auditoría.
Sombreado y agrupación: MOD(ROW(), n)
Alimenta ROW a MOD y se convierte en un generador de ritmo — una forma de hacer algo cada n filas. El clásico es el sombreado tipo cebra en el formato condicional:
=MOD(ROW(),2)=0 ' TRUE en filas pares -> sombrea una fila sí y otra no
=MOD(ROW()-2,3)=0 ' TRUE cada 3ª fila, contando desde el inicio de los datos (fila 2)
=INT((ROW()-2)/3)+1 ' -> 1,1,1,2,2,2,3,3,3 número de grupo, 3 filas por grupo
MOD(ROW(),2) alterna 1,0,1,0…; comprobar =0 te da una fila sí y otra no para el bandeado.
El fallo aquí es el mismo desfase de uno que en los números de serie: si tu tabla no empieza en
la fila que supusiste, resta un ancla (ROW()-2) para que el patrón empiece donde empiezan tus
datos, no donde empieza la hoja. Acierta con el ancla y una sola fórmula sombrea o agrupa una
tabla de cualquier longitud.
COLUMN: la gemela horizontal, y la trampa letra-vs-número
Todo lo anterior vale para COLUMN, girado 90°. COLUMN() informa de la propia columna de la
fórmula; COLUMN(D1) es 4. Su uso estrella es una serie que cuenta a lo ancho a medida
que arrastras a la derecha — para construir secuencias horizontales o alimentar un índice
incremental:
=COLUMN()-COLUMN($B$1)+1 ' arrastrada a la derecha desde B: 1, 2, 3, 4 ...
La trampa que pilla a todo el mundo: COLUMN devuelve un número, no una letra. La columna C
es 3, no "C". Si de verdad necesitas la letra (para construir una dirección de texto, por
ejemplo), COLUMN por sí sola no lo hará — recurre a ADDRESS,
que puede devolverte $C$1, y extrae las partes que quieras. Confundir el número de columna
con la letra de columna es el origen de la mayoría de las frustraciones con COLUMN; son tipos
de dato distintos para trabajos distintos.
ROW como motor matricial para INDEX y SMALL(IF())
Dale a ROW un rango en lugar de una sola celda y devuelve una matriz de números de fila,
uno por fila — ROW(A1:A5) es {1;2;3;4;5}. Esa matriz derramada es el motor silencioso
dentro de muchas fórmulas avanzadas.
=INDEX($D$2:$D$100, ROW()-1) ' extrae el N-ésimo elemento de la lista, fila a fila
=SMALL(IF(status="Open", ROW(status)), k) ' el número de fila del k-ésimo registro "Open"
=SEQUENCE(ROWS(data)) ' el equivalente moderno, compatible con el derrame
El modismo SMALL(IF(condición, ROW(rango)), k) — reúne los números de fila donde una
condición es verdadera, y luego elige el k-ésimo más pequeño — fue durante años la forma de
"devolver todas las coincidencias, no solo la primera" antes de las matrices dinámicas. En
Excel 365 normalmente recurrirías a FILTER o
SEQUENCE en su lugar, pero seguirás encontrándote el patrón
de matriz de ROW en libros heredados, y saber que ROW(rango) está generando una lista de
posiciones es lo que hace que esas fórmulas sean legibles en vez de mágicas.
El criterio a aplicar
La sintaxis es trivial — ROW para un número de fila, COLUMN para un número de columna, quita
el argumento para decir "aquí". El criterio está en saber que estás ante un problema de
posición, no de valor. La señal: siempre que estés a punto de escribir a mano una
secuencia (1, 2, 3…), una regla de "sombrea una fila sí y otra no", o un índice incremental
que un compañero inevitablemente romperá al insertar una fila — eso es trabajo para ROW/COLUMN,
y anclarlo a una referencia absoluta hace que se autorrepare. Y en el momento en que te pilles
esperando que ROW(C10) te dé el contenido de C10, para: lo que quieres es INDEX, para
convertir esa posición en un valor. Sostén la línea posición-frente-a-valor y estas dos
funciones pequeñas vuelven robustas tus hojas sin hacer ruido.
Cómo ayuda ExcelMaster
El anclaje es justo la parte delicada que las fórmulas con ROW hacen mal. Pídele a
ExcelMaster "una columna de número de fila que siga siendo correcta cuando inserto filas" y
escribe =ROW()-ROW($A$2)+1 anclado a tu fila de encabezado real, no una copiada y pegada que
está desfasada por la cantidad equivocada. Pídele "sombrea una de cada tres filas" y te devuelve
la regla MOD(ROW()-ancla, 3) correcta para un rango de formato condicional que empieza donde
empiezan tus datos. Y cuando describes un problema de valor en lenguaje de posición — "dame el
valor 5 filas más abajo" — reconoce que eso es trabajo de INDEX y no te entrega un ROW que
devuelve un número que no querías.
Preguntas frecuentes
¿Qué hace la función ROW en Excel?
ROW([referencia]) devuelve el número de fila de una celda. =ROW(A10) devuelve 10. Si
omites la referencia, devuelve el número de fila de la celda que contiene la fórmula, así que
=ROW() en la celda B7 devuelve 7. Informa de una posición en la cuadrícula — nunca
devuelve el valor almacenado en la celda.
¿Cómo obtengo el número de fila de la celda actual?
Escribe =ROW() sin argumento en la celda; devuelve el número de fila de esa misma celda.
Igualmente, =COLUMN() devuelve su propio número de columna. Para numerar una lista empezando
en 1 sin importar dónde comience, resta un ancla: =ROW()-ROW($A$2)+1 devuelve 1 en la fila
que contiene A2, 2 en la siguiente, y así sucesivamente.
¿Por qué ROW devuelve un número en lugar del valor de la celda?
Porque ese es su trabajo — ROW informa de dónde está una celda, no de qué hay dentro.
=ROW(C10) devuelve 10 (C10 está en la fila 10). Para traer el valor en una posición
calculada, pasa el número de fila a INDEX, p. ej. =INDEX(D:D, ROW(C10)) devuelve el
contenido de D10.
¿Cuál es la diferencia entre ROW y ROWS?
ROW (singular) devuelve una posición — el número de fila de una celda. ROWS (plural)
devuelve un recuento — cuántas filas hay en un rango: ROWS(A1:A10) es 10. El singular es
una coordenada; el plural es un tamaño. Consulta
Excel ROWS & COLUMNS.
¿Cómo hace COLUMN para devolver una letra en lugar de un número?
No lo hace — COLUMN siempre devuelve un número (la columna C es 3, no "C"). Para obtener la
letra de columna, usa ADDRESS, p. ej. =SUBSTITUTE(ADDRESS(1, COLUMN(), 4), "1", "")
extrae la parte de la letra. Consulta Excel ADDRESS.
Probado en
Probado en: Excel 365 (Windows 11) — última verificación el 2026-07-13.
Guías relacionadas: Excel FILAS y COLUMNAS · Excel HIPERVINCULO · INDICE y COINCIDIR · Excel DIRECCION · Excel DESREF
