ms excel localizar e substituir @ símbolo resulta em fórmula quebrada

4

Estou tentando pesquisar e substituir no Excel, a coluna está formatada como 'Texto'.

Localizar: [@

substitua por: @

Sempre que isso encontrar uma correspondência no início de uma célula, ou seja, o conteúdo da célula começa com [@ e tenta substituir isso com @ o resultado é um erro 'Esta função não é válida'

Eu acho que como o operador @ é para referências, isso faz com que a célula seja interpretada de forma diferente (não como texto mais)

Como faço essa substituição funcionar?

Copiar / colar em outro programa não é uma boa opção porque algumas das células contêm quebras de linha.

    
por Loopo 01.11.2013 / 17:42

1 resposta

2

Para minha surpresa, o Excel conhece pelo menos 4 métodos diferentes para substituir uma substring.

Todos eles podem lidar com um @ da maneira que você deseja. Exceto o primeiro método que você está usando ao abrir o search & substituir o diálogo .

O @ é o marcador de texto. . Se você inserir um valor numérico como 123 em uma célula e definir o formato personalizado como @ , a célula será formatada como texto (Alinhamento: direita »esquerda).

Estes exemplos substituirão o b na célula A1 'valor abc por 123 . O resultado é sempre a123c .

1. Range.Replace () (igual à caixa de diálogo CTRL + H )

    [A1].Replace "b", "123", xlPart

Sintaxe: Range.Replace( What, Replacement, [LookAt], [SearchOrder], [MatchCase], [SearchFormat], [ReplaceFormat] )

2. WorksheetFunction.Replace ()

    [A1] = WorksheetFunction.Replace([A1], InStr([A1], "b"), Len("b"), "123")

Sintaxe: WorksheetFunction.Replace( old_text, start, number_of_chars, new_text )

3. WorksheetFunction.Substitute ()

    [A1] = WorksheetFunction.Substitute([A1], "b", "123")

Sintaxe: WorksheetFunction.Substitute( text, old_text, new_text, [nth_appearance] )

4. Substituir ()

    [A1] = Replace([A1], "b", "123")

Sintaxe: Replace( Expression, Find, Replace, [Start, [Count, [Compare]]] )

Para responder à pergunta de Loopo. Você deve usar o último método, pois ele pode manipular @ no início de um valor de célula. Eu fiquei um pouco mais confortável com 2 caixas de entrada.

Sub ReplaceFunction()
    strFind = InputBox("Find what")
    strReplace = InputBox("Replace with")

    For Each cell In Selection
        cell.Value = Replace(cell.Value, strFind, strReplace)
    Next
End Sub

    
por 01.11.2013 / 20:17