¿Cómo obtener el nombre de columna actual en Excel?

30

¿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?

Jader Dias
fuente
1
Acabo de descubrir las funciones LINy COLel problema es que devuelven números, y necesito la letra de la columna INDIRECT.
Jader Dias
2
puede usar la OFFSETfunción junto con, o en lugar de, la INDIRECTfórmula en ese caso. Sin embargo, si desea usar cadenas, también actualicé mi respuesta.
Avance el
Por cierto, INDIRECTO es una función volátil, así que úsala con moderación. Suena como si AM OFFSET pudiera ser una mejor opción aquí si está basando la referencia que desea en algún cálculo de posición.
AdamV

Respuestas:

33

Puede usar las funciones ROWy COLUMNpara hacer esto. Si omite el argumento para esas fórmulas, se utiliza la celda actual. Se pueden usar directamente con la OFFSETfunció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 CHARfunció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 CODEfó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 COLUMNsiempre 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 A1hasta ZZ99sin 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).

Penetración
fuente
Funcionará solo para las primeras 26 columnas. Pero eso servirá.
Jader Dias
1
@Jader Dias es por eso que recomiendo que uses OFFSETen 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.
Avance el
2
No sé por qué esta respuesta obtuvo tantos votos cuando la respuesta de Scot es mucho mejor, excepto que no lo explicó. No se necesita fórmula compleja. Agregué un comentario para explicar por qué / cómo funciona.
Gerhard Powell el
Esto funciona hasta que te mudes a AA, etc., entonces no funcionará.
krystan honor
@krystanhonour usa la última fórmula de mi respuesta en ese caso ...However, this will not work with two-letter columns. In that case, you need the following formula to properly parse two-letter columns:
Avance
34

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', ADDRESSdevolverá 'AB1'. El sustituto elimina el '1'.

Scot Sutton
fuente
5

Prueba esto

=SUBSTITUTE(SUBSTITUTE(CELL("address"),"$" & ROW(),""), "$", "")

Esto le da el encabezado de columna exacto, sin ningún $ etc.

gaurav aggarwal
fuente
2

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.

sygn
fuente
2

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),"")
Vikas Madaan
fuente
2

Ligeramente manual pero menos VBA y una fórmula más simple:

  • En una fila de Excel, por ejemplo, la celda A1, ingrese el número de columna =column()
  • En la fila de abajo, ingrese =Address(1,A1)
  • Esto proporcionará el resultado. $A$1

Una vez que se copian los valores, busque y reemplace $y 1con espacios en blanco.

Steve
fuente
2

Esto también funcionará

=MID(CELL("address"),2,FIND("$",CELL("address"),2)-2)
edl
fuente
¿Puedes agregar alguna explicación a esto?
ChrisF
1

Otra posible forma sería usar algo como esto:

=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())

Donde se colidrefiere 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!A1y devolvería el valor que encontró en la celda correspondiente de MySheet1.

Esto le permitiría, por ejemplo, usar MySheet1como área de trabajo, eliminar y volver a insertar nuevos datos, mientras que cualquier formato o cálculo MySheet2que haga referencia a esos contenidos continuará funcionando correctamente con los nuevos conjuntos de datos de la hoja de trabajo con pestañas objetivo.

Tigger
fuente
1

Solución para la versión polaca de Excel:

  • para una celda particular:
=PODSTAW(PODSTAW(KOMÓRKA("adres";B1);"$" & WIERSZ();""); "$"; "")
  • para la celda actual:
=PODSTAW(PODSTAW(KOMÓRKA("adres");"$" & WIERSZ();""); "$"; "")
mla
fuente
0

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.

GollyJer
fuente
0
=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$2o$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.

Jon
fuente
0

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)
Hermen
fuente
0

prueba esto:

=LEFT(ADDRESS(1,COLUMN(),4),LEN(ADDRESS(1,COLUMN(),4))-1)
denz
fuente
0

La siguiente fórmula funciona sin importar dónde la coloque (le devolverá el nombre de la columna).

=SUBSTITUTE(SUBSTITUTE(ADDRESS(ROW(),COLUMN()),"$",""),ROW(),"")
Excellll
fuente
-1

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

ayus
fuente
44
Expanda esta respuesta explicando cuáles son estas funciones.
Kevin Panko
obtener el nombre actual de la columna en Excel, como "A1", "B1", ... incluso como "AA1", "BA1", "CA1", ...
ayus
-1
=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)))
mkltmsck
fuente