Notifications
Clear all

Localizar e substituir caracteres em várias planilhas

21 Posts
4 Usuários
0 Reactions
4,536 Visualizações
(@damassajr)
Posts: 0
New Member
Topic starter
 

Pessoal,
Tenho uma pasta com 130 planilhas onde nas células da coluna A (partindo de "A7"), de cada uma delas, existe a codificação "3010.94" e preciso mudar para "3010.96". O número de linhas varia para todas as planilhas. Existe uma forma de automatizar esse processo sem ter que abrir planilha por planilha e substituir pelo Ctrl+U?
Desde já agradeço!

 
Postado : 30/09/2015 2:11 pm
(@damassajr)
Posts: 0
New Member
Topic starter
 

por Nelson S » Qui Out 01, 2015 7:02 pm
Você informou o nome dos arquivos *.xlsx, a coluna ("A") onde se encontra o dado... só faltou informar o nome da planilha (Plan) onde se encontram a coluna. As planilhas (Plan) com os dados desses arquivos teriam o mesmo nome? Se sim, qual seria esse nome?

Resp: Todas as planilhas (Plan) estão nomeadas como "Plan1". O problema é que o caractere que quero substituir faz parte de um conjunto de caracteres. Por exemplo: Um documento está nomeado como "I-LD-3010.92-1351-800-HB1-001" e quero substituir para I-LD-3010.96-1351-800-HB1-001.
Eu testei a substituição apenas com o código "3010.92" na célula e retornou "3010,96".

 
Postado : 02/10/2015 5:16 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Pela rotina que o Reinaldo passou, os valores estão direto nas celulas :

strAtual = ActiveSheet.Range("C2")
strNovo = ActiveSheet.Range("D2")

Com isto sub entende-se que você está digitando nestes campos, neste caso devido o idioma o excel irá colocar virgula, e para utilizar da forma que pretende temos de converter este numero para texto e substituir a virgula por ponto, de uma olhada na rotina abaixo, deixei ela separada só para seu entendimento, faça alguns testes e se for isto e não conseguir implementar na rotina principal avisa que ajustamos.

Sub ConverteNum()

    Dim strAtual As String, strNovo As String
    
    strAtual = ActiveSheet.Range("C2")
    strNovo = ActiveSheet.Range("D2")
    
    CDec (strAtual) 'converte a string em decimal
    CDec (strNovo) 'converte a string em decimal
    
    MsgBox Replace(strAtual, ",", ".") 'converte virgula para ponto
    MsgBox Replace(strNovo, ",", ".") 'converte virgula para ponto

    'Formata o numero para texto e trocamos a virgula por ponto
    Range("C3").NumberFormat = "@"
    Range("C3").Value = Replace(strAtual, ",", ".")
    
    'Formata o numero para texto e trocamos a virgula por ponto
    Range("D3").NumberFormat = "@"
    Range("D3").Value = Replace(strNovo, ",", ".")

End Sub

[]s

 
Postado : 02/10/2015 6:43 am
(@damassajr)
Posts: 0
New Member
Topic starter
 

Prezado Mauro, o comando converte para texto apenas na planilha em que executo a macro. Preciso que ele formate a coluna "A" de todas as planilhas que tenho na pasta para texto. Além disso o texto inserido nas células da coluna "A" das planilhas possuem número de caracteres diferentes (Ex: A célula A7 possui 29 caracteres (I-LD-3010.92-5520-800-TKG-001); a célula A8 possui 27 caracteres (MC-3010.92-5520-800-TKG-010) e assim por diante. Preciso que seja substituído apenas o código "3010.92" por "3010.96" em todas as 130 planilhas que tenho na pasta. Preciso de um comando para realizar um "Localizar e Substituir" sem ter que abrir planilha por planilha.

 
Postado : 02/10/2015 7:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Damassa, eu respondi pelo que foi postado referente a ao tipo numerico e como você não comentou nada que não era o que pretendia conforme o modelo que o Reinaldo enviou, me baseei neste modelo, e como eu disse foi só um exemplo de rotina separada, se o resultado fosse o esperado tem de ajustar na rotina principal convertendo apos alterar na planilha destino.
Faça o seguinte, anexe pelo menos dois arquivos com dados fictícios e compactados conforme a regra do forum, assim da para analisar melhor sem ter de ficarmos por suposição.

 
Postado : 02/10/2015 8:38 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente assim então:

Option Explicit

Sub Carrega_Altera()
Dim cSheet As String
Dim OldName As String, strAtual As String, strNovo As String
Dim sDir As String, sPath As String

'Atribuindo valores as variaveis
OldName = ThisWorkbook.Name
cSheet = ActiveSheet.Range("B2").Value
sPath = ActiveSheet.Range("A2")
'Acrescenta barra invertiva se necessario
If Right(sPath, 1) <> "" Then
    sPath = sPath & ""
Else
    sPath = sPath
End If
strAtual = ActiveSheet.Range("C2")
strNovo = ActiveSheet.Range("D2")
'Altera o diretorio de trabalho
ChDir sPath
sDir = Dir("*.xls?")
Do While sDir <> ""
    If sDir <> OldName Then  'Caso esta planilha estaja no mesmo diretorio
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
        'Abre o arquivo encontrado
        Workbooks.Open Filename:=sDir, UpdateLinks:=0
        'Seleciona a planilha desejada
        Sheets(cSheet).Range("A:A").Select
        Selection.Find(What:=strAtual, After:=ActiveCell, LookIn:=xlFormulas, _
                        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                        MatchCase:=False, SearchFormat:=False).Activate
        Selection.Replace What:=strAtual, Replacement:=strNovo, LookAt:=xlPart _
                        , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                        ReplaceFormat:=False
        'Fecha o arquivo
        Range("A1").Select
        Workbooks(sDir).Close SaveChanges:=True
        'Posiciona para novo arquivco
    Else
        'Exit Sub
    End If
    sDir = Dir
Loop
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub
 
Postado : 02/10/2015 8:41 am
(@damassajr)
Posts: 0
New Member
Topic starter
 

Obrigado Reinaldo! Funcionou exatamente como eu precisava! Obrigado a todos pela colaboração! Parabéns pessoal!

 
Postado : 05/10/2015 4:49 am
Página 2 / 2