Qual é a função para obter o número da linha atual e o nome da coluna atual de uma célula no Excel?
OFFSET
função em conjunto com, ou em vez de, a INDIRECT
fórmula nesse caso. Se você quiser usar strings, também atualizei minha resposta.
Qual é a função para obter o número da linha atual e o nome da coluna atual de uma célula no Excel?
OFFSET
função em conjunto com, ou em vez de, a INDIRECT
fórmula nesse caso. Se você quiser usar strings, também atualizei minha resposta.
Respostas:
Você pode usar as funções ROW
e COLUMN
para fazer isso. Se você omitir o argumento para essas fórmulas, a célula atual será usada. Eles podem ser usados diretamente com a OFFSET
função ou qualquer outra função em que você possa especificar a linha e a coluna como valores numéricos.
Por exemplo, se você digitar =ROW()
na célula D8, o valor retornado será 8. Se você digitar =COLUMN()
na mesma célula, o valor retornado será 4.
Se você deseja a letra da coluna, pode usar a CHAR
função Eu não recomendo o uso de letras para representar a coluna, pois as coisas ficam complicadas ao passar para nomes de colunas com duas letras (onde apenas usar números é mais lógico).
Independentemente disso, se você ainda deseja obter a letra da coluna, basta adicionar 64 ao número da coluna (64 sendo um caractere a menos A
); portanto, no exemplo anterior, se você definir o valor da célula =CHAR(COLUMN()+64)
, o valor retornado será D
. Se você quisesse que o valor de uma célula fosse o próprio local da célula, a fórmula completa seria =CHAR(COLUMN()+64) & ROW()
.
Apenas um FYI, obtive 64 de uma tabela ASCII. Você também pode usar a CODE
fórmula, portanto, a fórmula atualizada usando isso seria =CHAR(COLUMN() + CODE("A") - 1)
. Você precisa subtrair 1, pois o valor mínimo de COLUMN
é sempre 1 e, em seguida, o valor de retorno mínimo de toda a fórmula seria B
.
No entanto, isso não funcionará com colunas de duas letras. Nesse caso, você precisa da seguinte fórmula para analisar corretamente 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 certeza se existe ou não uma maneira mais fácil de fazer isso, mas sei que funciona da célula A1
para ZZ99
sem problemas. No entanto, isso ilustra por que é melhor evitar o uso de identificadores de coluna com base em letras e seguir as fórmulas baseadas em números puros (por exemplo, usar o número da coluna em vez da letra com OFFSET
).
OFFSET
, o que permite especificar colunas como números. Independentemente disso, atualizei a resposta com uma fórmula para estendê-la para trabalhar com colunas de duas letras.
However, this will not work with two-letter columns. In that case, you need the following formula to properly parse two-letter columns:
Tente 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á '$' no valor retornado. Para a coluna 'AB', ADDRESS
retornará 'AB1'. O substituto remove o '1'.
Tente isto
=SUBSTITUTE(SUBSTITUTE(CELL("address"),"$" & ROW(),""), "$", "")
Isso fornece o cabeçalho exato da coluna, sem nenhum $ etc.
Digite isso 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)
Inglês :
=IF(INT((COLUMN()-1)/26)=0,"",CHAR((INT(COLUMN()-1)/26)+64))&CHAR(COLUMN()-(INT((COLUMN()-1)/26)*26)+64)
Você pode substituir a coluna () pelo número da linha.
Para obter o nome da coluna, usei as seguintes fórmulas.
Para uma célula específica:
=SUBSTITUTE(CELL("address",H3),"$" & ROW(H3),"")
Para a célula atual:
=SUBSTITUTE(CELL("address"),"$" & ROW(),"")
Experimente esta variação. Ele funciona em colunas de três letras e não deixa um "$" no front end:
=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")
Ligeiramente manual, mas menos VBA e uma fórmula mais simples:
=column()
=Address(1,A1)
$A$1
Depois que os valores são copiados, localize e substitua $
e 1
por branco.
Outra maneira possível seria usar algo como isto:
=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())
Onde colid
se refere a um intervalo nomeado que você criaria em outro lugar da pasta de trabalho, composto por duas colunas adjacentes com várias linhas: a primeira coluna contendo os números 1 a n correspondentes ao COLUMN()
número, a segunda contendo as letras A - ZZ ou, no entanto, muitas referências a colunas deseja acomodar. O valor ROW()
está à esquerda, pois é para retornar o número da linha.
Portanto, se você copiar a sequência acima para a célula A1 do 'MySheet2', ela será avaliada como =MySheet1!A1
e retornará o valor encontrado na célula correspondente de MySheet1
.
Isso permitiria, por exemplo, usar MySheet1
como uma área de trabalho, excluir e reinserir novos dados, enquanto qualquer formatação ou cálculo MySheet2
referente a esse conteúdo continuará funcionando corretamente com os novos conjuntos de dados da planilha com guias de destino.
Aqui está uma solução, fórmula definida pelo usuário do VBA. Funciona com colunas de 1, 2 e 3 letras.
Coloque o seguinte em um 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 retornará a letra da coluna da célula.
= COLUMNLETTER (B3) em qualquer célula retornará B .
Esta função definida pelo usuário funciona muito bem ao criar fórmulas genéricas dentro da função INDIRETO.
=MID(ADDRESS(ROW(),COLUMN()),2,FIND("$",ADDRESS(ROW(),COLUMN()),2)-2)
A fórmula do endereço funciona retornando o nome da coluna e da linha. O formato retornado será sempre $(Column Letters)$(Row Numbers)
- por exemplo, $AA$2
ou$XAA$243556
Se sabemos que $ sempre ocorrerá no primeiro caractere, podemos usar a primeira fórmula intermediária para começar a puxar os caracteres após o primeiro sinal de $ (ou seja, o segundo caractere).
Em seguida, encontramos o próximo sinal de $ (como sabemos que haverá apenas dois) e sabemos quantos caracteres existem entre o primeiro e o segundo sinal de dólar. O resto é simples subtração.
tente isto:
= SE (COLUNA ()> 26, CHAR (COLUNA () / 26 +64), "") & CHAR (MOD (COLUNA () - 1,26) +65) & ROW ()
esta função é válida até "ZY1" ou coluna = 701
LIN
eCOL
mas o problema é que eles retornam números, e eu preciso da letra da coluna paraINDIRECT
ele.