¿Cuál es la función para obtener el número de línea actual y el nombre de columna actual para una celda en Excel?
¿Cuál es la función para obtener el número de línea actual y el nombre de columna actual para una celda en Excel?
Puede usar las funciones ROW
y COLUMN
para hacer esto. Si omite el argumento para esas fórmulas, se utiliza la celda actual. Se pueden usar directamente con la OFFSET
función o con cualquier otra función en la que pueda especificar tanto la fila como la columna como valores numéricos.
Por ejemplo, si ingresa =ROW()
en la celda D8, el valor devuelto es 8. Si ingresa =COLUMN()
en la misma celda, el valor devuelto es 4.
Si desea la letra de la columna, puede usar la CHAR
función. No recomiendo el uso de letras para representar la columna, ya que las cosas se ponen difíciles al pasar a los nombres de columna de doble letra (de todos modos, el uso de números es más lógico).
De todos modos, si aún desea obtener la letra de la columna, simplemente puede agregar 64 al número de columna (64 es un carácter menos A
), por lo que en el ejemplo anterior, si establece el valor de la celda =CHAR(COLUMN()+64)
, el valor devuelto sería D
. Si desea que el valor de una celda sea la ubicación de la celda en sí, la fórmula completa sería =CHAR(COLUMN()+64) & ROW()
.
Solo para su información, obtuve 64 de una tabla ASCII. También puede usar la CODE
fórmula, por lo que la fórmula actualizada con esto sería =CHAR(COLUMN() + CODE("A") - 1)
. Debe restar 1 ya que el valor mínimo de COLUMN
siempre es 1, y luego el valor mínimo de retorno de toda la fórmula sería B
.
Sin embargo, esto no funcionará con columnas de dos letras. En ese caso, necesita la siguiente fórmula para analizar correctamente las columnas de dos letras:
=IF(COLUMN()>26,IF(RIGHT(CHAR(IF(MOD(COLUMN()-1,26)=0,1,MOD(COLUMN()-1,26))+64),1)="Y",CHAR(INT((COLUMN()-1)/26)+64) & "Z",CHAR(INT((COLUMN()-1)/26)+64) & CHAR(IF(MOD(COLUMN(),26)=0,1,MOD(COLUMN(),26))+64)),CHAR(COLUMN()+64))&ROW()
No estoy seguro de si hay una manera más fácil de hacerlo o no, pero sé que funciona desde la celda A1
hasta ZZ99
sin problemas. Sin embargo, esto ilustra por qué es mejor evitar el uso de identificadores de columna basados en letras y seguir con fórmulas basadas en números puros (por ejemplo, usar el número de columna en lugar de la letra con OFFSET
).
OFFSET
en su lugar, lo que te permite especificar columnas como números. De todos modos, actualicé la respuesta con una fórmula para extenderla para que funcione con columnas de dos letras.
However, this will not work with two-letter columns. In that case, you need the following formula to properly parse two-letter columns:
Pruebe la siguiente función:
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")
Explicación: ADDRESS(row_num, column_num, [abs_num])
. [abs_num] = 4
= dirección relativa. Eso significa que no hay '$' s en el valor devuelto. Para la columna 'AB', ADDRESS
devolverá 'AB1'. El sustituto elimina el '1'.
Prueba esto
=SUBSTITUTE(SUBSTITUTE(CELL("address"),"$" & ROW(),""), "$", "")
Esto le da el encabezado de columna exacto, sin ningún $ etc.
Escriba esto en cualquier celda:
español :
=SI(ENTERO((COLUMNA()-1)/26)=0;"";CAR((ENTERO(COLUMNA()-1)/26)+64))&CAR(COLUMNA()-(ENTERO((COLUMNA()-1)/26)*26)+64)
Inglés :
=IF(INT((COLUMN()-1)/26)=0,"",CHAR((INT(COLUMN()-1)/26)+64))&CHAR(COLUMN()-(INT((COLUMN()-1)/26)*26)+64)
Puede reemplazar la columna () por el número de fila.
Para obtener el nombre de la columna, utilicé las siguientes fórmulas.
Para una celda particular:
=SUBSTITUTE(CELL("address",H3),"$" & ROW(H3),"")
Para la celda actual:
=SUBSTITUTE(CELL("address"),"$" & ROW(),"")
Prueba esta variación. Funciona en columnas de 3 letras y no deja un "$" en la parte frontal:
=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")
Ligeramente manual pero menos VBA y una fórmula más simple:
=column()
=Address(1,A1)
$A$1
Una vez que se copian los valores, busque y reemplace $
y 1
con espacios en blanco.
Esto también funcionará
=MID(CELL("address"),2,FIND("$",CELL("address"),2)-2)
Otra posible forma sería usar algo como esto:
=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())
Donde se colid
refiere a un rango con nombre que crearía en otro lugar dentro del libro de trabajo que comprende dos columnas adyacentes con múltiples filas: la primera columna que contiene los números 1 a n correspondientes al COLUMN()
número, la segunda que contiene las letras A - ZZ, o la cantidad de columnas que le haga referencia Deseo acomodar. Se ROW()
deja bien como está para devolver el número de fila.
Entonces, si copiara la cadena anterior a la celda A1 de 'MySheet2', se evaluaría como =MySheet1!A1
y devolvería el valor que encontró en la celda correspondiente de MySheet1
.
Esto le permitiría, por ejemplo, usar MySheet1
como área de trabajo, eliminar y volver a insertar nuevos datos, mientras que cualquier formato o cálculo MySheet2
que haga referencia a esos contenidos continuará funcionando correctamente con los nuevos conjuntos de datos de la hoja de trabajo con pestañas objetivo.
Solución para la versión polaca de Excel:
=PODSTAW(PODSTAW(KOMÓRKA("adres";B1);"$" & WIERSZ();""); "$"; "")
=PODSTAW(PODSTAW(KOMÓRKA("adres");"$" & WIERSZ();""); "$"; "")
Aquí hay una VBA, fórmula definida por el usuario, solución. Funciona con columnas de 1, 2 y 3 letras.
Ponga lo siguiente en un módulo de código:
Function COLUMNLETTER(Optional rng As Range) As String
'Returns the Column Letter of the top left cell in rng.
If rng Is Nothing Then Set rng = Application.Caller
COLUMNLETTER = Left(rng.Address(0, 0), IIf(rng.Column > 26, IIf(rng.Column > 702, 3, 2), 1))
End Function
= COLUMNLETTER () en cualquier celda devolverá la letra de la columna de la celda.
= COLUMNLETTER (B3) en cualquier célula volverá B .
Esta función definida por el usuario funciona muy bien al crear fórmulas genéricas dentro de la función INDIRECTA.
=MID(ADDRESS(ROW(),COLUMN()),2,FIND("$",ADDRESS(ROW(),COLUMN()),2)-2)
La fórmula de la dirección funciona devolviendo el nombre de la columna y la fila. El formato devuelto siempre será $(Column Letters)$(Row Numbers)
, por ejemplo, $AA$2
o$XAA$243556
Si sabemos que $ siempre ocurrirá en el primer carácter, podemos usar la primera fórmula intermedia para comenzar a extraer caracteres después del primer signo $ (es decir, el segundo carácter).
Luego, encontramos el próximo signo $ (ya que sabemos que solo habrá dos) y sabemos cuántos caracteres hay entre el primer y el segundo signo de dólar. El resto es simple resta.
Así es como puede encontrar el encabezado de la columna (es decir, la letra):
=RIGHT(LEFT(ADDRESS(1,COLUMN()),LEN(ADDRESS(1,COLUMN()))-2),LEN(ADDRESS(1,COLUMN()))-3)
prueba esto:
=LEFT(ADDRESS(1,COLUMN(),4),LEN(ADDRESS(1,COLUMN(),4))-1)
La siguiente fórmula funciona sin importar dónde la coloque (le devolverá el nombre de la columna).
=SUBSTITUTE(SUBSTITUTE(ADDRESS(ROW(),COLUMN()),"$",""),ROW(),"")
prueba esto:
= SI (COLUMNA ()> 26, CHAR (COLUMNA () / 26 +64), "") y CHAR (MOD (COLUMNA () - 1,26) +65) y FILA ()
esta función es efectiva hasta "ZY1" o columna = 701
=IF(COLUMN()>702,RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),4),3),IF(COLUMN()>26,RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),3),2),RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),2),1)))
LIN
yCOL
el problema es que devuelven números, y necesito la letra de la columnaINDIRECT
.OFFSET
función junto con, o en lugar de, laINDIRECT
fórmula en ese caso. Sin embargo, si desea usar cadenas, también actualicé mi respuesta.