• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

MetalFatigue

[Resolvido] Obter Letra da coluna através do indice EXCEL

6 mensagens neste tópico

Estou a alterar uma ferramenta em VBA que se encontrava miserável. Uma das situações que me deparei foi com a necessidade de verificar celulas preenchidas e devolver-me por exemplo o indice da coluna ou da linha.

Para as linhas é fácil uma correspondencia ao numero da linha, uma vez que são o mesmo. Mas então para as colunas? Como é que em código digo que por exemplo sabendo o indice "16", que letra de coluna irá corresponder?

Peço desculpa se esta pergunta ja foi respondida, mas eu pesquisei e não encontrei.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas porque precisas de saber qual a letra ?

Podes utiliza, por exemplo, Cells(RowIndex,ColumnIndex) em ver de Range("A1")

Tens de mostrar um exemplo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá paulino,

Pois eu sei disso. Mas acho que é preferivel ter em letra pois torna mais perceptivel, principalmente para alguem possa vir a mexer de novo no código.

Seja como for continuei a pesquisar após postar aqui e entretanto encontrei a resposta. Aqui fica para quem quiser o mesmo efeito:

Function ColumnLetter(ColumnNumber As Integer) As String
  If ColumnNumber > 26 Then

    ' 1st character:  Subtract 1 to map the characters to 0-25,
    '                 but you don't have to remap back to 1-26
    '                 after the 'Int' operation since columns
    '                 1-26 have no prefix letter

    ' 2nd character:  Subtract 1 to map the characters to 0-25,
    '                 but then must remap back to 1-26 after
    '                 the 'Mod' operation by adding 1 back in
    '                 (included in the '65')

    ColumnLetter = Chr(Int((ColumnNumber - 1) / 26) + 64) & _
                   Chr(((ColumnNumber - 1) Mod 26) + 65)
  Else
    ' Columns A-Z
    ColumnLetter = Chr(ColumnNumber + 64)
  End If
End Function

Origem

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, só perguntei por perguntar  :)

Mas existem maneiras muito mais fáceis de fazer isso ... por exemplo:

Function GetColumnLetter(rg As Range) As String
    Dim str() As String
    str = Split(rg.Address, "$")
    
    GetColumnLetter = str(1)
End Function

Depois utilizas assim:

MsgBox GetColumnLetter(Cells(1, 3))

ou

MsgBox GetColumnLetter([b1])

PS: Fiz agora à pressa e não está muito bem testada  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou também a reparar, assim de repente, um possivel problema com essa solução. Por exemplo se quiseres seleccionar uma coluna inteira, não interessando a celula? Ou seja range("A:A"). Não é possivel usar o cell(x,y) ou estou enganado?

EDIT: Desculpa, não conhecia bem a função split. o $ vai decidir a divisão entre letra e numero  :-[

Aparentemente também se encontra correcta a tua solução (nao testei) e mais simples. obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SIm, funciona :)

O resultado de rg.Address é algo tipo "$A$1" e o split é só usado para separar para uma array e depois retirar apenas o que nos interessa: a coluna.

Podia ser feito de outra forma, mas esta é bastante simples.

Vou indicar como resolvido este problema  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora