Notifications
Clear all

Macro para editar celula

16 Posts
5 Usuários
0 Reactions
2,800 Visualizações
(@jonasjtg)
Posts: 43
Eminent Member
Topic starter
 

Ai pessoal blz!

Estou tentando criar uma macro que faça da seguinte forma.
Exemplo:
a célula esta preenchida com 41x quero que fique x41
a célula esta preenchida com 41xx quero que fique xx41
a célula esta preenchida com 41xxx quero que fique xxx41

Assim por diante.

Tentei fazer a macro mas não deu certo.

Segue o modelo para quem puder me ajudar.

 
Postado : 07/04/2016 12:56 pm
(@leonardo)
Posts: 81
Trusted Member
 

Olá jonasjtg,

Use este código.

Set Ws = ThisWorkbook.ActiveSheet

For Ini = 1 To Ws.Cells(Rows.Count, "A").End(xlUp).Row
    Ws.Range("B" & Ini) = _
    Mid(Ws.Range("A" & Ini), _
    InStr(Ws.Range("A" & Ini), "x") - 1 + 1, _
    Len(Ws.Range("A" & Ini))) & _
    Left(Ws.Range("A" & Ini), _
    InStr(Ws.Range("A" & Ini), "x") - 1)
Next
 
Postado : 07/04/2016 2:06 pm
(@jonasjtg)
Posts: 43
Eminent Member
Topic starter
 

Deu certo mas quando não tem X da erro!
Exemplo:
118x
120
119xx

 
Postado : 07/04/2016 2:41 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Tente isso apos essa linha

Set Ws = ThisWorkbook.ActiveSheet

Acrescente essa

On Error Next

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 07/04/2016 3:04 pm
(@jonasjtg)
Posts: 43
Eminent Member
Topic starter
 

Apareceu a mensagem!

Erro de compilação:
Era esperado: Goto ou Resume fiz dessa forma.

Sub teste()

Set Ws = ThisWorkbook.ActiveSheet

On Error Next

For Ini = 1 To Ws.Cells(Rows.Count, "A").End(xlUp).Row
Ws.Range("B" & Ini) = _
Mid(Ws.Range("A" & Ini), _
InStr(Ws.Range("A" & Ini), "x") - 1 + 1, _
Len(Ws.Range("A" & Ini))) & _
Left(Ws.Range("A" & Ini), _
InStr(Ws.Range("A" & Ini), "x") - 1)
Next
End Sub
 
Postado : 07/04/2016 3:17 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Verdade

Faltou o Resume

On Error Resume Next

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 07/04/2016 3:25 pm
(@jonasjtg)
Posts: 43
Eminent Member
Topic starter
 

Deu certo mas não copio o numero sem X
exemplo
119x
120
121xx
Resultado
x119
121xx

ele não copio o 120

 
Postado : 07/04/2016 3:38 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Sem ter como testar fica dificil ajudar

Poste o arquivo que esta usando.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 07/04/2016 3:42 pm
(@jonasjtg)
Posts: 43
Eminent Member
Topic starter
 

Muito Obrigado pela ajuda MPrudencio!

E o mesmo da 1 mensagem que enviei.
Só tinha esquecido de mencionar os detalhes acima campo sem X e copiar também o campo sem X.
Mas vou posta outro modelo completo.

Obs.: Desculpa por estar atrapalhando algo.

 
Postado : 07/04/2016 3:50 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Desculpe eu nao vi a planilha no primeiro post mas troque o codigo acima por este

Sub teste()

Dim linha As Long
Dim ulinha As Long
Set ws = ThisWorkbook.ActiveSheet
linha = 1
ulinha = ws.Range("a" & Rows.Count).End(xlUp).Row

On Error Resume Next
For Ini = 1 To ws.Cells(Rows.Count, "A").End(xlUp).Row
ws.Range("B" & Ini) = _
Mid(ws.Range("A" & Ini), _
InStr(ws.Range("A" & Ini), "x") - 1 + 1, _
Len(ws.Range("A" & Ini))) & _
Left(ws.Range("A" & Ini), _
InStr(ws.Range("A" & Ini), "x") - 1)
Next

For a = linha To ulinha

If ws.Cells(linha, 2).Value = "" Then

ws.Cells(linha, 2).Value = ws.Cells(linha, 1).Value

End If
linha = linha + 1
Next

End Sub

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 07/04/2016 4:21 pm
(@osvaldomp)
Posts: 858
Prominent Member
 

Resultado na coluna 'D', a partir de 'D1'

Sub MudaXis()
 Dim c As Range, k As Long, m As Long
  For Each c In Range("A1:A" & Cells(Rows.Count, 1).End(3).Row)
   k = Len(c) - Len(Replace(c, "x", ""))
   Cells(m + 1, 4) = Application.Rept("x", k) & Replace(c, "x", "")
   m = m + 1
  Next c
End Sub

Osvaldo

 
Postado : 07/04/2016 4:31 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Só ajustando a rotina do leonardo e do Marcelo, sem precisar do "On Error" :

Sub InverteNumTexto()

    Dim linha As Long
    Dim ulinha As Long
    
    Set ws = ThisWorkbook.ActiveSheet

    linha = 1
    ulinha = ws.Range("a" & Rows.Count).End(xlUp).Row

    For Ini = 1 To ws.Cells(Rows.Count, "A").End(xlUp).Row
        'Verifica se é numerico
        If IsNumeric(ws.Range("A" & Ini)) Then
            
            ws.Range("B" & Ini) = ws.Range("A" & Ini)
        
        Else
        
            ws.Range("B" & Ini) = _
            Mid(ws.Range("A" & Ini), _
            InStr(ws.Range("A" & Ini), "x") - 1 + 1, _
            Len(ws.Range("A" & Ini))) & _
            Left(ws.Range("A" & Ini), _
            InStr(ws.Range("A" & Ini), "x") - 1)
        
        End If
        
    Next

End Sub

[]s

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

 
Postado : 07/04/2016 5:38 pm
(@jonasjtg)
Posts: 43
Eminent Member
Topic starter
 

Muito Obrigado!

Leonardo,MPrudencio,Osvaldomp e Mauro Coutinho.
Vcs são feras!

Só que surgiu algo que achei que não ia precisar mas vou precisar. Se poderem me ajudar agradeço muito.

Seguindo o modelo acima exemplo:
ISSO E SÓ PARA NUMEROS NÃO E PRA 11X
A regra e 4 casas decimais então ele verifica a célula sem tem 4 casas se tiver duas casas preenchida adiciona 2 zeros se for 3 casas adiciona 1 zero se for 1 casa ele adiciona 3 zeros.
1=0001
20=0020
212=0212

 
Postado : 07/04/2016 7:20 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Isso muda tudo....

O codigo muda completamente

Qdo se pede um exemplo se espera que o mesmo seja igual a planilha original.

Mas enfim vai ficar pra depois.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 07/04/2016 7:30 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Precisa ser com VBA, não pode ser por Formula ?

=TEXTO(A1;"0000")
ou
=REPT(0;4-NÚM.CARACT(A1))&A1

ou pode formatar a celula com o tipo "personalizado" com 4 zeros "0000" ( sem as aspas)

Mas se tiver mesmo que ser com VBA, pode utilizar :

Sub Completa_Zero_A_Esquerda()
    
    Dim c As Range, sLin As Long
    
    sLin = 1
    
    For Each c In Range("A1:A" & Cells(Rows.Count, 1).End(3).Row)
        
        'Formato para 4 zeros
        Cells(sLin, 4).NumberFormat = "0000"
        
        'Copia para Col D o numero ja formatado com zeros
        Cells(sLin, 4) = Application.WorksheetFunction.Rept("0", 4 - Len(c)) & c
        
        sLin = sLin + 1
         
    Next c
    
End Sub

[]s

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

 
Postado : 07/04/2016 9:04 pm
Página 1 / 2