[Resolvido] Obter Letra da coluna através do indice EXCEL - Visual Basic for Applications (VBA) - Portugal-a-Programar
[Resolvido] Obter Letra da coluna através do indice EXCEL
By MetalFatigue, February 27, 2009 in Visual Basic for Applications (VBA)
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.
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.
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:
' 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')
Ok, só perguntei por perguntar
Mas existem maneiras muito mais fáceis de fazer isso ... por exemplo:
Depois utilizas assim:
MsgBox GetColumnLetter(Cells(1, 3))
MsgBox GetColumnLetter([b1])
PS: Fiz agora à pressa e não está muito bem testada
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.
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.