Encontre e substitua vários valores nas células selecionadas

5

Eu quero executar um localizar e substituir vários valores em um intervalo no excel com valores de 2 colunas: A com a palavra original; B com a tradução. Eu já encontrei o código do VBA para obter este trabalho para 50%, mas este código é executado em todo o worskheet.

Idealmente, gostaria de poder executá-lo apenas no intervalo selecionado. Um bônus adicional seria se eu também pudesse selecionar o intervalo de pesquisa.

Isso é o que estou usando até agora. Obrigado pela sua ajuda!

Sub abbrev()
            Dim abvtab() As Variant
            Dim ltsheet As Worksheet
            Dim datasheet As Worksheet
            Dim lt As Range

            'Change Lookup to the sheet name with your lookup table.
            Set ltsheet = Sheets("Lookup")

            'Change Data to the sheet name with your data.
            Set datasheet = Sheets("Data")

            'Change A2 to the top left cell (not the header) in your lookup table.
            'Change B2 to top right cell.
            Set lt = ltsheet.Range("A1", ltsheet.Range("B1").End(xlDown))

            abvtab = lt

            For i = 1 To UBound(abvtab)
                datasheet.Cells.Replace What:=abvtab(i, 1), Replacement:=abvtab(i, 2), LookAt:=xlPart, _
                    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
                    ReplaceFormat:=False
            Next i
End Sub
    
por WouterB 16.07.2013 / 17:48

1 resposta

3

Excel Multi Replace

  1. Abra seu editor de VBA ( Alt + F11 ) e cole a macro abaixo em qualquer lugar
  2. Configure um intervalo de pesquisa de duas colunas: a primeira coluna é o valor a ser pesquisado. 2º o valor para substituir
  3. Selecione o seu intervalo de entrada, onde os valores devem ser substituídos, como mostrado na 1ª imagem
  4. Execute a macro ( Alt + F8 ).

A macro pergunta onde está o seu intervalo de pesquisa. Primeiro o nome da folha e, em seguida, o endereço do intervalo de pesquisa. Digite apenas a primeira coluna, por exemplo, A1:A2 para o exemplo abaixo.

É isso. Agora a macro começa a percorrer todas as regras de substituição e as aplica como um Pesquisa normal do Excel & Substitua ( Ctrl + H ) no seu intervalo de entrada selecionado.

Input range            Replace rules               Input range after macro

SubMultiReplace()OnErrorGoToerrorcatchDimarrRules()AsVariantstrSheet=InputBox("Enter sheet name where your replace rules are", _
        "Sheet name", "Sheet1")
    strRules = InputBox("Enter address of replaces rules." & vbNewLine & _
        "But only the first column!", "Address", "A1:A100")

    Set rngCol1 = Sheets(strSheet).Range(strRules)
    Set rngCol2 = rngCol1.Offset(0, 1)
    arrRules = Application.Union(rngCol1, rngCol2)

    For i = 1 To UBound(arrRules)
        Selection.Replace What:=arrRules(i, 1), Replacement:=arrRules(i, 2), _
            LookAt:=xlWhole, MatchCase:=True
    Next i

errorcatch:
End Sub
    
por 16.07.2013 / 18:31