Ir ao conteúdo

Macro no excel - Copia, localiza, substitui - Ajuda!!!!


doValle

Posts recomendados

Postado

Olá amigos!

Estou precisando de ajuda com uma macro no excel. Eu tenho duas planilhas:Plan1 e Plan2 ambas possuem cadastros de clientes, o que eu preciso fazer é comparar as duas planilhas e quando houver um mesmo cliente nas duas planilhas a macro deverá excluir o cadastro deste cliente na Plan1.

Para isto eu fiz o seguinte:

1 - Utilizo as referências relativas e dou um enter na coluna, copio o nome da empresa da Plan2

2 - Entro na Plan1 e Utilizo o comando Localizar(Ctrl+L), colo o nome da empresa que está na área de transferência para para a janela localizar, clico em substituir e mando substituir todas as células que contém o nome deste cliente pelo formato de cor amarelo (assim ao terminar o processo eu colocaria um filtro na linha superior e mandaria separar as amarelas das brancas, podendo exluí-las como o pretendido ou deixar marcado apenas)

3 - Volto para a Plan2 e está terminada a Macro.

O Problema é o seguinte, A macro não entende que o nome do objeto que se quer localizar deve ser colado na janela localizar, o excel simplesmente utiliza o nome que foi colado quando a macro foi gravada, abaixo está o programa em VBA:

Sub Macro16()

'

' Macro16 Macro

'

'

ActiveCell.Offset(1, 0).Range("A1").Select

Selection.Copy

Windows("Clientes antigos Neroni - Cópia 2.xls").Activate

Cells.Replace What:="AQUI ESTÁ O PROBLEMA!!", Replacement:="", LookAt:=xlPart, _

SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

ReplaceFormat:=True

Windows("Lista completa Clientes DOGO 18-06-07 -2.xls").Activate

End Sub

Aonde está escrito "AQUI ESTÁ O PROBLEMA!!" deveria estar algum comando Paste que eu ainda não encontrei, por favor, alguém me ajude!

[]´s à todos.

  • Membro VIP
Postado

Deixa ver se eu entendi:

Você tem 2 planilhas: Plan1 e Plan2. Você quer que os nomes que existam em ambas as planilhas sejam excluidos na Plan1. Neste caso eu não utilizaria macro, Eu criaria uma coluna que sinalizaria os duplicados através de uma formula (procv, proch, etc...) e depois eu filtraria e iria exclui-los manualmente. é mais seguro (ainda mais se tratando de dados de clientes.). Não entendi sua macro que copia, cola, etc...

Se você preferir uma macro, me envie o esqueleto de sua planilha que eu posso desenvolver algo para você.

Postado

Obrigado pela resposta amigo, ajudou um pouco mas ainda não consegui solucionar o problema.

Na verdade são mais de 12mil registros, e seria muito simples criar essa macro e muito eficiente se não fosse o problema que citei acima. Pois é o seguinte, a lista 1 e a lista 2 diferem um pouco no nome dos clientes, por exemplo:

Lista 1: ABC - Industria e Comercio

Lista 2: ABC Ind. e comercio

Sendo assim fica difícil relacionar as duas listas, o que fiz foi pegar a Lista 1 e eliminar todos os LTDA´s , S/A´s, Ind. e comercio, etc. para ficar com apenas o nome da empresa, como ABC no exemplo acima. Com a lista 1 "enxuta" eu pego os seus valores e tento encontrá-los na Lista 2, porém, não encontrei nenhuma fórmula que funcione como o localizar do excel, que procura pela parte de um texto em um outro texto maior, como por exemplo:

LISTA 1: AÇOS VILLARES

LISTA 2: 1571 - AÇOS VILLARES S/A

Qual a fórmula que verifica se uma coluna contém o texto especificado?

É por isso que aquela macro ia resolver o problema com maior facilidade e precisão....

[]´s

Postado
Obrigado pela resposta amigo, ajudou um pouco mas ainda não consegui solucionar o problema.

Na verdade são mais de 12mil registros, e seria muito simples criar essa macro e muito eficiente se não fosse o problema que citei acima. Pois é o seguinte, a lista 1 e a lista 2 diferem um pouco no nome dos clientes, por exemplo:

Lista 1: ABC - Industria e Comercio

Lista 2: ABC Ind. e comercio

Sendo assim fica difícil relacionar as duas listas, o que fiz foi pegar a Lista 1 e eliminar todos os LTDA´s , S/A´s, Ind. e comercio, etc. para ficar com apenas o nome da empresa, como ABC no exemplo acima. Com a lista 1 "enxuta" eu pego os seus valores e tento encontrá-los na Lista 2, porém, não encontrei nenhuma fórmula que funcione como o localizar do excel, que procura pela parte de um texto em um outro texto maior, como por exemplo:

LISTA 1: AÇOS VILLARES

LISTA 2: 1571 - AÇOS VILLARES S/A

Qual a fórmula que verifica se uma coluna contém o texto especificado?

É por isso que aquela macro ia resolver o problema com maior facilidade e precisão....

[]´s

V. deve usar na construção da macro o método "find" e "findnext".

Uma coisa do tipo:

Set localizador = .Find("expressão a procurar", lookin:=xlValues)

Set localizador = .FindNext(localizador)

Uma vez que V. eliminou alguns elementos identificativos da Lista 1, isto é, a Lista 1 tem a identificação mais reduzida então a "expressão a procurar" será cada um dos nomes dos clientes da Lista 1 que vai correr a totalidade da Lista 2 (as colunas onde estão os elementos identificativos). É pois de construir um "loop" que identifica cada um dos dados da Lista 1 executando para esse nome um .Find na Lista 2. Se o nome for encontrado nesta última lista marque , como entender, o registo da Lista 1. Isso significa que esse nome está nas duas listas. Muito embora o loop completo sobre os milhares de registos (12000 registos serão as duas listas juntas) possa levar alguns segundos a execução do método "Find" sobre a Lista 2 é quase instantânea.

Será necessário um cuidado especial com a "expressão a procurar". Se no caso dos AÇOS VILLARES a string a utilizar poderia ser os primeiros 7 caracteres a partir da esquerda, já no caso da ABC - Industria e Comercio a coisa seria mais complicada pois o 5º elemento, "-", não aparece na Lista 2 e os 6º e 7º elementos estão desfasados no seu posicionamento.

Espero ter sido útil.

Postado

Olá Martins!

É isto mesmo! Só que eu sou leigo em VBA e não consegui utilizar o comando que você descreveu. Eu preciso selecionar na lista 1, mudar para lista 2, localizar, substituir o formato , voltar para lista 1, escolher a próxima célula e entrar em loop. O problema é que eu não tenho conhecimento nenhum de VBA, como eu incluo este comando .Find na minha rotina do começo do tópico de forma a ele buscar na lista 2 o conteúdo da célula selecionada na lista 1??

Obrigado pela resposta,

[]´s

Postado
Olá Martins!

É isto mesmo! Só que eu sou leigo em VBA e não consegui utilizar o comando que você descreveu. Eu preciso selecionar na lista 1, mudar para lista 2, localizar, substituir o formato , voltar para lista 1, escolher a próxima célula e entrar em loop. O problema é que eu não tenho conhecimento nenhum de VBA, como eu incluo este comando .Find na minha rotina do começo do tópico de forma a ele buscar na lista 2 o conteúdo da célula selecionada na lista 1??

Obrigado pela resposta,

[]´s

Eis como V. pode usar o comando find e findnext:

Dim localizador As Variant

With Worksheets(1).Range("b2:c20000")

Set localizador = .Find("abc", LookIn:=xlValues)

If Not localizador Is Nothing Then

endereco = localizador.Address

Do

localizador.Interior.ColorIndex = 6

Set localizador = .FindNext(localizador)

Loop While Not localizador Is Nothing And localizador.Address <> endereco

End If

End With

O index 6 corresponde à cor amarela.

Assim o comando corre rapidamente as colunas B e C, da linha 2 à 20000, alterando a cor da célula para amarelo quando estejam presentes os caracteres "abc" no valor da célula. Assim são marcadas as que tenham por exemplo "abc", "sididabc", "soejabcdidi23", "SEFABCED".

Segui o esquema de marcar a amarelo por sugestão do seu post. Pessoalmente preferia registar numa coluna ao lado "repetido" para não alterar o que se encontra registado.

Dê uma olhadela na "ajuda" do editor do Visual Basic do Excel pois permite uma grande aprendizagem.

Espero ter sido útil.

  • 3 anos depois...
Postado
Eis como V. pode usar o comando find e findnext:

Dim localizador As Variant

With Worksheets(1).Range("b2:c20000")

Set localizador = .Find("abc", LookIn:=xlValues)

If Not localizador Is Nothing Then

endereco = localizador.Address

Do

localizador.Interior.ColorIndex = 6

Set localizador = .FindNext(localizador)

Loop While Not localizador Is Nothing And localizador.Address <> endereco

End If

End With

O index 6 corresponde à cor amarela.

Assim o comando corre rapidamente as colunas B e C, da linha 2 à 20000, alterando a cor da célula para amarelo quando estejam presentes os caracteres "abc" no valor da célula. Assim são marcadas as que tenham por exemplo "abc", "sididabc", "soejabcdidi23", "SEFABCED".

Segui o esquema de marcar a amarelo por sugestão do seu post. Pessoalmente preferia registar numa coluna ao lado "repetido" para não alterar o que se encontra registado.

Dê uma olhadela na "ajuda" do editor do Visual Basic do Excel pois permite uma grande aprendizagem.

Espero ter sido útil.

Bom dia,

preciso de uma ajuda...

Preciso de algo parecido com esse que você fez.

Tenho uma planilha que em uma coluna tenho cerca de umas 30 ou mais ( bem mais) no caso vou dar um exemplo:

"Falha no GMG" esta numa coluna que contem só informações dos problemas... ai preciso que a macro procure toda celula nessa coluna que contem a palavra GMG, e substitua a frase toda por "energia" só...

pois eu tenho 7 tipos de falhas ....

ou seja de 30 ou mais tipos de falhas que aparecer vai ficar somente 7 tipos .

obrigado

  • 3 meses depois...
Postado

Bom pessoal, trabalho com excel a algum tempo, mas estou utilizando macro recentemente e tenho dificuldades com os códigos, contudo aparentemente o que eu procuro é parecido com isso aqui em cima....

Tenho 2 Planilhas - Planilha 1 e Planilha 2

comparar (planilha1, célula A2) com (planilha2, intervalo B1 até B1000)

para os resultados positivos substituir os valores de (planilha2, intervalo B1 até B1000) por valor (planilha1, célula B2)

aí eu preciso que repita até (planilha1, coluna A) esteja vazia

sempre fui pesquisador do Clube do Hardware e sempre achei o que precisava, só agora estou fazendo minha cadastro...

se puderem me ajudar com este código eu agradeço muito

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!