多次查找和替换

问题描述 投票:0回答:2

我已经拖网了该网站,但没有找到与我的问题完全相符的内容。

我有一个excel文件(Sheet1),该文件在多个列和行(基本上是整个工作表)中包含各种外来字符(例如,“ä”或“Ö”)。

在Sheet2中,我有一个包含这些字符(A)以及需要用(B)替换的字符的列表/表(A和B列。

我希望使用VBA代码在Sheet1中搜索所有这些字符,并将它们全部替换为相应的替代字符。

任何帮助都会很棒。

谢谢,

excel vba search replace find
2个回答
0
投票
中包含各种外来字符(例如“ä”或“Ö”)

[经验告诉我,使用查找和替换时,大写和小写字符都一样。

下面的示例使用Q列作为查找字符,R列替代。该代码会查找替换列A

中的单元格
Sub Using_Replace()
    Dim LstRw As Long, rng As Range, c As Range

    LstRw = Cells(Rows.Count, "Q").End(xlUp).Row
    Set rng = Range("Q1:Q" & LstRw)

    For Each c In rng.Cells

        Range("A:A").Replace what:=c, Replacement:=c.Offset(, 1), _
                             LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
                             SearchFormat:=False, ReplaceFormat:=False
    Next c

End Sub

enter image description here

当您测试代码时,您会发现查找/替换没有注意到Q6和Q15中字符之间的差异。

但是,如果您遍历每个单元格,则会识别出差异。

-

Sub Using_LikeLoop()
    Dim LstRw As Long, rng As Range, c As Range
    Dim frNg As Range, f As Range

    LstRw = Cells(Rows.Count, "Q").End(xlUp).Row
    Set rng = Range("Q1:Q" & LstRw)
    Set frNg = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)

    For Each c In rng.Cells

        For Each f In frNg.Cells

            If f Like "*" & c & "*" Then f = Replace(f, c, c.Offset(, 1))

        Next f

    Next c

End Sub

0
投票

罗斯,您的解决方案几乎可以解决问题。您可以使用以下方法简化它:

Sub ReplaceChar()
    Dim Sh1 As Worksheet
    Dim Sh2 As Worksheet
    Dim cel As Range

    Set Sh1 = Sheets(1)
    Set Sh2 = Sheets(2)

    For Each cel In Sh2.Columns(1).SpecialCells(2)
        With Sh1.Cells
            .Replace What:=cel, Replacement:=cel.Offset(, 1)
        End With
    Next
End Sub

运行宏之前的Sheet1和Sheet2:

enter image description here

enter image description here

...以及运行代码后的Sheet1:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.