Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

2
respostas

[Projeto] Desafio: Outra maneira de solucionar

Venho compartilhar aqui outra maneira de solucionar o desafio deste curso utilizando uma Macro!
A ideia foi usar a opção Localizar e Substituir do Excel e mandar substituir todas as cerquilhas (#) por "" (espaço vazio).
Essa macro pode não ser a mais interessante para todos os casos, mas neste específico funciona muito bem. Vale lembrar que cada caso é um caso, cada planilha é uma planilha e cada problema é um problema, então devemos estar abertos a achar soluções para cada trabalho.

Sub RemoverCer()
' Remove a cerquilhas por um espaço vazio
    Cells.Replace What:="#", Replacement:="", LookAt:=xlPart, SearchOrder:= _
        xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False, _
        FormulaVersion:=xlReplaceFormula2
End Sub

Você pode fazer uma Marco semelhante para o primeiro caso, o dos produtos, e substituir o "$" por um espaço vazio.

2 respostas

Olá, Paulo. Como vai?

Excelente contribuição! A sua solução usando o método Cells.Replace no VBA é simplesmente fantástica e mostra um entendimento muito maduro sobre o desenvolvimento de automações.

Você tocou em um ponto fundamental na carreira de qualquer profissional de dados: "cada caso é um caso e devemos estar abertos a achar soluções para cada trabalho". Em programação e automação com Macros, muitas vezes o caminho mais elegante e performático não é construir um laço de repetição (For/Next) para varrer milhares de linhas uma por uma, mas sim aproveitar os recursos nativos altamente otimizados do próprio Excel — que é exatamente o que o Cells.Replace faz por trás dos panos.

Para enriquecer o seu post no fórum e trazer uma análise técnica sobre as vantagens dessa sua abordagem para a comunidade, preparei um paralelo sobre performance e uma dica de segurança para o seu código.


O Casamento Perfeito: Performance vs. Simplicidade

Para entender por que a sua solução é tão boa para esse cenário, vale a pena comparar a anatomia da sua Macro com a estrutura tradicional que a maioria dos estudantes costuma usar (varrer a planilha com um loop):

  • A Abordagem Tradicional (Loop Linha por Linha): O código precisa ler a linha 1, testar se tem #, apagar, descer para a linha 2, testar, apagar... Se a planilha tiver 50.000 linhas, a Macro fará 50.000 operações de leitura e escrita, o que pode fazer o Excel travar ou congelar a tela por alguns segundos.
  • A Sua Abordagem (Cells.Replace): Você disparou o motor interno do Excel de uma vez só sobre toda a área de células (Cells). O Excel processa isso na memória de baixo nível, resolvendo o problema de forma praticamente instantânea, independentemente do tamanho da base de dados.

Uma Dica de Ouro para Blindar sua Macro: Restringir o Alcance

Como você bem pontuou, essa Macro funciona incrivelmente bem para este caso específico. Contudo, usando o objeto genérico Cells, o VBA vai aplicar a substituição na planilha inteira.

Se por acaso houvesse alguma outra coluna contendo uma tag, um código de produto legítimo ou uma string de sistema que usasse a cerquilha (ex: Produto_#102), o código apagaria esse caractere por engano.

Para deixar a sua solução ainda mais profissional e segura para planilhas corporativas complexas, uma boa prática é restringir a ação do Replace apenas para a coluna ou seleção específica onde estão os dados "sujos". Veja como faríamos isso limitando a ação, por exemplo, à coluna A:

Sub RemoverCerOtimizado()
    ' Aplica a substituição exclusivamente na Coluna A, protegendo o resto da planilha
    Columns("A:A").Replace What:="#", Replacement:="", LookAt:=xlPart, SearchOrder:= _
        xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False, _
        FormulaVersion:=xlReplaceFormula2
End Sub

E para o exemplo que você citou no final do post, bastaria mapear a coluna dos produtos e trocar o What:="#" por What:="$".

Parabéns pelo pensamento fora da caixa e por compartilhar uma solução tão limpa, rápida e eficiente com os seus colegas!

Espero que possa ter lhe ajudado!

Nossa, perfeita a solução utulizando apenas a coluna em questão! Isso pode acabar com os conflitos que reportou. Muito obrigado pela adição.