Como localizar e substituir o caractere “*” em valores de texto do Excel na célula, mas NÃO em fórmulas

6

Muito semelhante a esta pergunta: Como encontrar e substituir o caractere "*" no Excel

Mas eu preciso deixar as fórmulas intocadas. Eu tenho cerca de 50 + folhas que têm dois tipos de células com "*"

Conteúdo do caso 1 - o valor da célula pode ser: "*** 1,43"

Conteúdo do caso 2 - o valor da célula pode ser: "= 100 * B3"

Eu gostaria de encontrar e substituir todos os asteriscos do Caso 1 por "" enquanto ignoro as células do Caso 2 que contêm fórmulas usando asteriscos como um multiplicador. Basicamente, mude as células estáticas, mas não altere as células com fórmulas.

Obrigado!

    
por StillLearning 04.09.2015 / 21:14

2 respostas

3

Você pode usar a seguinte rotina se tiver o Excel 2013 ou posterior. Coloque o código no módulo ThisWorkbook. Executar Uma Vez; ele atualizará as células apropriadas em toda a pasta de trabalho.

Sub SetStarsBlank()

    For Each ws In ThisWorkbook.Worksheets
        For Each c In ws.UsedRange
            If Not Application.WorksheetFunction.IsFormula(c) Then
                c.Value = Replace(c.Value, "*", "")
            End If
        Next
    Next

End Sub
    
por 06.09.2015 / 02:39
2

Primeiro, faça uma cópia do seu arquivo, caso algo dê errado.

Em seguida, crie a seguinte sub-rotina VBA:

Sub StillLearning1()

    For Each c In Range("A1:Z100")
        If Not c.HasFormula Then
            temp = WorksheetFunction.Substitute(c.Value, "*", "")
            If Left(temp, 1) = "=" Or Left(temp, 1) = "'" Then
                temp = "'" & temp
            End If
            c.Value = temp
        End If
    Next c

End Sub

Veja Como adiciono o VBA no MS Office? para obter informações gerais sobre como usar o VBA no Excel e os outros aplicativos do Microsoft Office. StillLearning1 é apenas um nome de sub-rotina arbitrário; use o nome que quiser. Altere A1:Z100 para o intervalo em que você deseja que a substituição ocorra. Espero que o resto seja um pouco autoexplicativo:

  • For Each c ... Next c é um loop que é executado 2600 vezes (para o intervalo de amostra de A1:Z100 ; 26 colunas × 100 linhas) com c indo para todas as células nesse intervalo.
  • c.HasFormula é um booleano que informa se a célula c contém uma fórmula. Isso é um pouco mais confiável do que verificar se o primeiro caractere é = , porque uma célula que contém '=== é um valor de string (texto), mas parecerá com === , e por isso parecerá começar com = .

    Se uma célula contiver uma fórmula; deixe sozinho. Se não contiver uma fórmula, faça a substituição.

  • Verifique o resultado da substituição para ver se começa com = ou ' . Se isso acontecer, atribuindo-o diretamente para a célula resultará no Excel interpretando esse primeiro caractere de uma forma indesejável, Portanto, proteja-o, prefixando um ' .

Em seguida, execute a sub-rotina.

    
por 05.09.2015 / 07:14