Notifications
Clear all

Converter Letras em numeros

10 Posts
3 Usuários
0 Reactions
1,226 Visualizações
(@sondahl)
Posts: 4
New Member
Topic starter
 

Olá pessoal, sou novo em vba e preciso muito de ajuda.

Preciso de uma macro que converta um texto escrito em uma célula em números a partir de uma tabela de referência.
Por exemplo:
Tabela de referência
a 4
b 6
c 3
d 2

em uma linha está as letras: dac
A macro deve ler letra por letra e converter o texto "dac" em 243

Alguém consegue me ajudar nessa?
Abs.

 
Postado : 07/12/2016 6:42 pm
(@edcronos2)
Posts: 346
Reputable Member
 

tem que determiar como vai ser a tabela e as possibilidades do texto a ser convertido
tipo,
a tabela vai ter todas as possibilidades do alfabeto?
vai ter símbolos?
vai estar em uma range fixa vai ser mais de uma tabela de conversão?

 
Postado : 07/12/2016 7:00 pm
(@sondahl)
Posts: 4
New Member
Topic starter
 

edcronos2

A ideia é a tabela ter todas as possibilidades de letras do alfabeto. Ex: a á à ã b c d e é f g ....
Símbolos como º { + = não entram na tabela de referência
Essa tabela é fixa e será apenas uma tabela de conversão.

 
Postado : 08/12/2016 5:07 pm
(@edcronos2)
Posts: 346
Reputable Member
 

como vc não falou o estilo da tabela montei uma função generica

Function Ed_Convert_String(ByVal palavra As String, tabela As Range) As Variant
     Dim x As Integer, stri As String

     tabb = tabela.Value2
     cc = UBound(tabb, 2)
     '   If cc Mod 2 = 0 Then
     For x = 1 To Len(palavra)
          LT = Mid(palavra, x, 1)
          For L = 1 To UBound(tabb, 1)
               For c = 1 To cc Step 2
                    If LT = tabb(L, c) Then stri = stri & tabb(L, c + 1): GoTo pula
               Next
          Next
            MsgBox "letra " & lt &"  não existe na tabela"
pula:
     Next
     '   End If
     Ed_Convert_String = stri
End Function

mod de usar:

=Ed_Convert_String(texto a ser convertido ; Tabela de troca)
texto é unico e a tabela tem sempre que ter 1 coluna da letra e uma de troca
tipo
A - B <<-colunas
a - 10
b - 2

A - B - C - D <<-colunas
a - 10 - b - 2

 
Postado : 08/12/2016 7:35 pm
(@sondahl)
Posts: 4
New Member
Topic starter
 

edcronos2

Obrigado pelo retorno. A tabela de referência é isso mesmo, nela eu tenho duas colunas
A - B <<-colunas
a - 10
b - 2

Essa tabela se chama FonteDados
E eu tenho outra tabela chamada Entrada.
A ideia é pegar um texto que está na célula A1 da tabela Entrada e converter para uma outra célula usando esse código.

Tentei colocar o seu código mas não sei onde devo fazer a referência aos dados. Coloquei assim:

Function Ed_Convert_String(ByVal palavra=Entrada.A1 As String, tabela=FonteDados.Range("A1:B25") As Range) As Variant

Mas da erro.

Outra pergunta é como eu coloco essa função pra ser executada em uma "Public Sub" para ser executado quando um botão é clicado.

 
Postado : 08/12/2016 8:47 pm
(@edcronos2)
Posts: 346
Reputable Member
 

isso é uma função
se usa como formula na planilha
onde vc colocar a formula vai aparecer o valor

 
Postado : 08/12/2016 9:45 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ed, com sua liberdade, montei um exemplo usando sua Function, utilizando um Range nomeado "Tabela" com as letras e numeros e utilizei a formula e tambem adicionei uma rotina que chama a Function, onde através do Inputbox selecionamos a celula com o texto a converter.

Poderá ser adaptada para jogar o resultado em uma celula, mas como o sonda não enviou como está o modelo dele, estou só simulando com utilizar a Function em outra rotina.

Converte Letras em Numeros Edcronos

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 08/12/2016 9:55 pm
(@edcronos2)
Posts: 346
Reputable Member
 

Mauro por isso mesmo fiz apenas uma função generica que funciona para a maioria dos casos

não está otimizada, sempre se tem loops completos na tabela até se encontrar a letra ou valor do texto
considerei fazer loop inverso, no caso a tabela seria a primaria , mas iria dar maior complexidade na rotina
caso a tabela fosse muito grande e os textos tbm se poderia considerar o uso de dicionario para se evitar esse tipo de loop
não considera reversão , para isso se teria que normalizar a saida , em vez de 1 usar 01 caso maior valor de troca seja 99

mas bem, como função resolve a maioria dos casos e de maneira dinamica,
se forem muitos valores e tabelas muito grandes o melhor mesmo é macro para fazer tudo de uma vez e com valores fixos

 
Postado : 08/12/2016 10:17 pm
(@sondahl)
Posts: 4
New Member
Topic starter
 

edcronos2 e Mauro,

Muito obrigado, é bem por ai o que estou precisando.
Com o arquivo que o Mauro mandou consegui colocar os cálculos, ficou meio tosco, mas ainda estou iniciando no vba.
Só não consegui entender porque o "Case Not" não funcionou, tive que colocar um "Case Is" sem nada pra colocar um else.
Vou mandar o arquivo que estou preparando pra você comentarem, se puderem e quiserem. Ta bem tosco, se puder me orientar como posso melhorar eu agradeço.

Abs.

 
Postado : 09/12/2016 6:13 pm
(@edcronos2)
Posts: 346
Reputable Member
 

o seu arquivo zip está vazio
e o certo é especificar oq vc quer
pedidos genéricos geram respostas genericas
não que isso seja ruim, eu mesmo só tenho duvidas genericas mas a maioria não entende que oq eu preciso é de uma direção e não a solução pronta
no seu caso vc quer uma solução pronta, então tem que ser pergunta com detalhes suficientes
no caso da função é facilmente implementada para varios casos, até mesmo tabelas diferentes
a tabela pode até ser de letra para letra ou de numero para palavra
se pode até troca de tabela mediante um SE

=Ed_Convert_String( palavra ; Se( a1=1 ; tabela1 ; tabela2 ) )

 
Postado : 09/12/2016 8:48 pm