Como obter o nome da coluna actual em Excel?
Qual é a função para obter o número da linha actual e o nome da coluna actual de uma célula em Excel?
Qual é a função para obter o número da linha actual e o nome da coluna actual de uma célula em Excel?
Experimente a seguinte função:
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")
Explicação: ADDRESS(row_num, column_num, [abs_num])
. [abs_num] = 4
= endereço relativo. Isso significa que não há “$‘s” no valor devolvido. Para a coluna “AB”, os ADDRESS
vão devolver “AB1”. O substituto retira o “1”.
Pode utilizar as funções ROW
e COLUMN
para o fazer. Se omitir o argumento para essas fórmulas, é utilizada a célula actual. Estas podem ser usadas directamente com a função OFFSET
, ou qualquer outra função onde pode especificar tanto a linha como a coluna como valores numéricos.
Por exemplo, se introduzir =ROW()
na célula D8, o valor devolvido é 8. Se introduzir =COLUMN()
na mesma célula, o valor devolvido é 4.
Se quiser a letra da coluna, pode usar a função CHAR
. Eu não recomendo o uso de letras para representar a coluna, pois as coisas ficam complicadas quando se passa para nomes de colunas com duas letras (onde apenas usar números é mais lógico de qualquer forma).
Independentemente disso, se ainda quiser obter a letra da coluna, pode simplesmente adicionar 64 ao número da coluna (64 sendo um carácter a menos que A
), por isso no exemplo anterior, se definir o valor da célula para =CHAR(COLUMN()+64)
, o valor devolvido seria D
. Se quisesse que o valor de uma célula fosse a própria localização da célula, a fórmula completa seria =CHAR(COLUMN()+64) & ROW()
.
Apenas um FYI, obtive 64 de uma tabela ASCII. Você também poderia usar a fórmula CODE
, então a fórmula atualizada usando isto seria =CHAR(COLUMN() + CODE("A") - 1)
. Tem de subtrair 1 uma vez que o valor mínimo de COLUMN
é sempre 1, e então o valor mínimo de retorno de toda a fórmula seria B
.
No entanto, isto não funcionará com colunas de duas letras. Nesse caso, precisa da seguinte fórmula para analisar correctamente as colunas de duas 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()
Não tenho a certeza se existe uma forma mais fácil de o fazer ou não, mas sei que funciona da célula A1
para a ZZ99
sem problemas. No entanto, isto ilustra porque é melhor evitar a utilização de identificadores de coluna baseados em letras, e ficar com fórmulas puramente baseadas em números (por exemplo, utilizar o número da coluna em vez da letra com OFFSET
).
Experimente este
=SUBSTITUTE(SUBSTITUTE(CELL("address"),"$" & ROW(),""), "$", "")
Isto dá-lhe o título exacto da coluna, sem qualquer $, etc.
Ligeiramente manual mas menos VBA e uma fórmula mais simples:
=column()
=Address(1,A1)
$A$1
Uma vez copiados os valores, encontre e substitua $
e 1
por branco.
Para obter o nome da coluna utilizei as seguintes fórmulas.
Para uma célula em particular:
=SUBSTITUTE(CELL("address",H3),"$" & ROW(H3),"")
Para a célula actual:
=SUBSTITUTE(CELL("address"),"$" & ROW(),"")
Tente esta variação. Funciona em colunas de 3 letras, e não deixa um “$” na parte da frente:
=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")
Digite-o em qualquer célula:
Español :
=SI(ENTERO((COLUMNA()-1)/26)=0;"";CAR((ENTERO(COLUMNA()-1)/26)+64))&CAR(COLUMNA()-(ENTERO((COLUMNA()-1)/26)*26)+64)
Português :
=IF(INT((COLUMN()-1)/26)=0,"",CHAR((INT(COLUMN()-1)/26)+64))&CHAR(COLUMN()-(INT((COLUMN()-1)/26)*26)+64)
Pode substituir a coluna() pelo número da linha.
Outra forma possível seria utilizar algo como isto:
=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())
Onde colid
se refere a um intervalo named que você criaria noutro local dentro da pasta de trabalho, compreendendo duas colunas adjacentes com múltiplas linhas: a primeira coluna contendo os números de 1 a n correspondentes ao número COLUMN()
, a segunda contendo as letras A - ZZ, ou quantas referências de coluna quiser acomodar. O ROW()
está bem à esquerda como é para devolver o número da linha.
Assim, se copiar a linha acima para a célula A1 de “MySheet2”, avaliaria como =MySheet1!A1
, e devolveria o valor que encontrou na célula correspondente de MySheet1
.
Isto permitir-te-ia, por exemplo, utilizar MySheet1
como uma área de trabalho, apagar e reintroduzir novos dados, enquanto qualquer formatação ou cálculos em MySheet2
que se refiram a esses conteúdos continuarão a funcionar correctamente com os novos conjuntos de dados da folha de trabalho do separador de destino.
=MID(ADDRESS(ROW(),COLUMN()),2,FIND("$",ADDRESS(ROW(),COLUMN()),2)-2)
A fórmula de endereço funciona através da devolução do nome da coluna e da linha. O formato retornado será sempre $(Column Letters)$(Row Numbers)
- por exemplo, $AA$2
ou $XAA$243556
&007
Se soubermos que $ ocorrerá sempre no primeiro caracter, podemos usar a primeira fórmula média para começar a puxar caracteres após o primeiro sinal $ (ou seja, o segundo caracter).
Depois, encontramos o próximo sinal $ (como sabemos que só haverá dois) e sabemos quantos caracteres existem entre o primeiro e o segundo sinal $. O resto é uma simples subtracção.
Aqui está uma VBA, fórmula definida pelo utilizador, solução. Funciona com colunas de 1, 2, & 3 letras.
Coloque o seguinte num 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() em qualquer célula irá retornar a letra da coluna da célula. =COLUMNLETTER(B3) em qualquer célula irá retornar B.
Esta Função Definida pelo Utilizador funciona muito bem quando se criam fórmulas genéricas dentro da função INDIRECT.
A seguinte fórmula funciona independentemente do local onde a coloca (devolver-lhe-á o nome da coluna).
=SUBSTITUTE(SUBSTITUTE(ADDRESS(ROW(),COLUMN()),"$",""),ROW(),"")