Substituir texto em células - dicas do Excel

Índice

Jean fez a pergunta sobre o Excel desta semana:

Estou tentando converter um catálogo de preços de fornecedor no Excel para combinar seus códigos UPC com nosso sistema de códigos UPC. Seu catálogo de preços tem uma coluna no Excel com uma série de números, por exemplo. 000004560007 OU cel000612004. O que tenho que fazer é duas vezes. Preciso tirar os três primeiros zeros sem excluir nenhum outro 0 da célula. Em seguida, tenho que acrescentar um código de 3 dígitos "upc" antes do primeiro dígito numérico da célula. Esta será uma necessidade contínua. Terei que treinar várias pessoas para usar o sistema Excel.

Parece que Jean já considerou usar Edit-Replace para se livrar dos três zeros. Isso não funcionaria porque fazer uma substituição de edição em "000004560007" faria com que ambas as ocorrências de 000 desaparecessem.

Primeiro, quero sugerir que Jean insira uma coluna temporária ao lado dos códigos de preço atuais, escreva uma fórmula para fazer a transformação e, em seguida, use Editar-Copiar, Editar-Colar Valores Especiais para copiar a fórmula de volta sobre os códigos de preço originais.

A função REPLACE () mal documentada fará o truque neste caso. Fiquei decepcionado com a implementação de REPLACE (). Eu teria pensado que pediria um texto específico para substituir, mas em vez disso, pede ao usuário para descobrir as posições dos caracteres para substituir. REPLACE substituirá parte de uma string de texto por uma nova string. Os quatro argumentos que você passa para a função são a célula que contém o texto antigo, a posição do caractere no texto antigo que você deseja substituir, o número de caracteres a substituir e o novo texto a ser usado.

Minha suposição simplificadora é que os três zeros representam o início do código UPC na string. Assim, não há necessidade de pesquisar o primeiro caractere numérico na célula. Assim que a fórmula encontrar os três zeros, ela poderá substituir esses três zeros pela string "upc".

Para encontrar a localização da primeira ocorrência de "000" no texto, você usaria esta fórmula:

=FIND(A2,"000")

A fórmula que Jean precisaria inserir na célula B2 seria:

=REPLACE(A2,FIND("000",A2),3,"upc")

Minha intenção é fazer com que os analistas de preços destacem uma série de células e, em seguida, invoquem essa macro. A macro usará um loop com "Para cada célula na seleção" no início. Com esse loop, "célula" se torna uma variável de intervalo especial. Você pode usar cell.address ou cell.value ou cell.row para encontrar o endereço, valor ou linha da célula atual no loop. Aqui está a macro:

Public Sub Jean() ' This macro will replace the first occurrence of "000" ' in each selected cell with the string "upc" ' copyright 1999 www.MrExcel.com For Each cell In Selection cell.Value = Replace(cell.Value, "000", "upc", 1, 1, vbTextCompare) Next cell End Sub

Observe que esta é uma macro do tipo destrutivo. Quando o usuário destaca um intervalo de células e executa a macro, essas células são alteradas. Nem é preciso dizer que você deseja testar completamente sua macro nos dados de teste antes de liberá-la nos dados de produção reais. Quando você tem uma situação como a de Jean, em que será constantemente solicitado a transformar uma coluna usando uma fórmula complexa, escrever uma macro simples como a ilustrada aqui pode ser uma ferramenta eficaz e que economiza tempo.

Artigos interessantes...