Eu só descobri as funções LINe COLmas o problema é que eles retornam números, e eu preciso da letra da coluna para INDIRECTele.
Jader Dias 28/07
2
você pode usar a OFFSETfunção em conjunto com, ou em vez de, a INDIRECTfórmula nesse caso. Se você quiser usar strings, também atualizei minha resposta.
Breakthrough
A propósito, INDIRETO é uma função volátil, então use-a com moderação. Parece que um deslocamento pode ser uma escolha melhor aqui se você basear a referência desejada em algum cálculo de posição.
AdamV
Respostas:
33
Você pode usar as funções ROWe COLUMNpara fazer isso. Se você omitir o argumento para essas fórmulas, a célula atual será usada. Eles podem ser usados diretamente com a OFFSETfunçã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 CHARfunçã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 CODEfó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:
Não tenho certeza se existe ou não uma maneira mais fácil de fazer isso, mas sei que funciona da célula A1para ZZ99sem 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).
Ele funcionará apenas para as primeiras 26 colunas. Mas isso serve.
Jader Dias
1
@Jader Dias, é por isso que recomendo que você use 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.
Breakthrough
2
Não sei por que essa resposta obteve tantos votos quando a resposta de Scot é MUITO melhor, exceto que ele não a explicou. Nenhuma fórmula complexa é necessária. Adicionei um comentário para explicar por que / como funciona.
Gerhard Powell
Isso funciona até que você mude para AA etc., então não funcionará.
Krystan honra
@krystanhonour use a última fórmula da minha resposta nesse caso ... # 1However, this will not work with two-letter columns. In that case, you need the following formula to properly parse two-letter columns:
Breakthrough
34
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', ADDRESSretornará 'AB1'. O substituto remove o '1'.
Onde colidse 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!A1e retornará o valor encontrado na célula correspondente de MySheet1.
Isso permitiria, por exemplo, usar MySheet1como uma área de trabalho, excluir e reinserir novos dados, enquanto qualquer formatação ou cálculo MySheet2referente 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.
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$2ou$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.
LIN
eCOL
mas o problema é que eles retornam números, e eu preciso da letra da coluna paraINDIRECT
ele.OFFSET
função em conjunto com, ou em vez de, aINDIRECT
fórmula nesse caso. Se você quiser usar strings, também atualizei minha resposta.Respostas:
Você pode usar as funções
ROW
eCOLUMN
para fazer isso. Se você omitir o argumento para essas fórmulas, a célula atual será usada. Eles podem ser usados diretamente com aOFFSET
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 deCOLUMN
é sempre 1 e, em seguida, o valor de retorno mínimo de toda a fórmula seriaB
.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:
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
paraZZ99
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 comOFFSET
).fonte
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:
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'.fonte
Tente isto
Isso fornece o cabeçalho exato da coluna, sem nenhum $ etc.
fonte
Digite isso em qualquer célula:
Español :
Inglês :
Você pode substituir a coluna () pelo número da linha.
fonte
Para obter o nome da coluna, usei as seguintes fórmulas.
Para uma célula específica:
Para a célula atual:
Experimente esta variação. Ele funciona em colunas de três letras e não deixa um "$" no front end:
fonte
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
$
e1
por branco.fonte
Isso vai funcionar também
fonte
Outra maneira possível seria usar algo como isto:
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 aoCOLUMN()
número, a segunda contendo as letras A - ZZ ou, no entanto, muitas referências a colunas deseja acomodar. O valorROW()
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 deMySheet1
.Isso permitiria, por exemplo, usar
MySheet1
como uma área de trabalho, excluir e reinserir novos dados, enquanto qualquer formatação ou cálculoMySheet2
referente a esse conteúdo continuará funcionando corretamente com os novos conjuntos de dados da planilha com guias de destino.fonte
Solução para polonês versão Excel:
fonte
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:
= 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.
fonte
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.
fonte
Veja como você pode encontrar o cabeçalho da coluna (ou seja, a letra):
fonte
tente isto:
fonte
A fórmula a seguir funciona, não importa onde você a coloque (ela retornará o nome da coluna).
fonte
tente isto:
esta função é válida até "ZY1" ou coluna = 701
fonte
fonte