替换多列中的值

时间:2014-02-03 13:11:25

标签: excel excel-vba replace multiple-columns vba

我是vba的新手所以请耐心等待。

我需要替换工作表中多列中的值。如果存在,则需要匹配和替换大约50个值。

例如: 我想在列C和F中搜索以查看是否存在任何列出的值,然后将其替换为另一个文本。每个搜索的值都有唯一的替换值。

优选地,如果字符串可以使用相同的查找来搜索和替换两个列。每列都没有多个语句。

这是我试图使用的:

Sub reppp()

    Columns("C:C").Replace What:="Search1", Replacement:="Text1", SearchOrder:=xlByColumns
    Columns("F:F").Replace What:="Search1", Replacement:="Text1", SearchOrder:=xlByColumns
    Columns("C:C").Replace What:="Search2", Replacement:="Text2", SearchOrder:=xlByColumns
    Columns("F:F").Replace What:="Search2", Replacement:="Text2", SearchOrder:=xlByColumns

End Sub

因为我需要为每个“替换”更改/添加2个条目。

我也得到了新的工作表,需要定期进行这种处理。将这些表格转换为我的规格的最简单方法是什么?有没有办法在单独的工作表中声明搜索和替换,并以某种方式调用该文档并运行宏?

3 个答案:

答案 0 :(得分:0)

这应该符合您的需求:

Sub demo()
    Dim r As Range
    Set r = Range("C:C, F:F")
    ary1 = Array("Search1", "Search2")
    ary2 = Array("Text1", "Text2")
    For i = 0 To 1
        r.Replace What:=ary1(i), Replacement:=ary2(i)
    Next i
End Sub

注意:

您可以增加数组并修改 For 语句以展开转换表。

答案 1 :(得分:0)

按照我的帖子here的逻辑,这里有一个符合您需求的代码。

Sub FindReplaceWithRef()

    Dim Wbk As Workbook: Set Wbk = ThisWorkbook
    Dim Wsht As Worksheet: Set Wsht = Wbk.Sheets("Sheet1") 'Modify as needed.
    Dim Dict As Object
    Dim RefList As Range, RefElem As Range
    Dim TargetRng As Range

    Set Dict = CreateObject("Scripting.Dictionary")
    Set RefList = Wsht.Range("J1:J3") 'Modify as needed.
    Set TargetRng = Union(Wsht.Range("C1:C20"), Wsht.Range("F1:F20")) 'Modify as needed.

    With Dict
        For Each RefElem In RefList
            If Not .Exists(RefElem) And Not RefElem Is Nothing Then
                .Add RefElem.Value, RefElem.Offset(0, 1).Value
            End If
        Next RefElem
    End With

    For Each Key In Dict
        With TargetRng
            .Replace What:=Key, Replacement:=Dict(Key)
        End With
    Next Key

    Set Dict = Nothing

End Sub

<强>截图:

<强> Before running code:

enter image description here

<强> After running code:

enter image description here

如果有帮助,请告诉我们。

答案 2 :(得分:0)

如果您的表格在数据中没有间隙设置,那么使用UsedRange可以满足您的需求。

范围( “C:C,F:F”)选择。 使用ActiveSheet.UsedRange .Replace“Search1”,“Text1”,xlPart .Replace“Search2”,“Text2”,xlPart .Replace“Search3”,“Text3”,xlPart .Replace“Search4”,“Text4”,xlPart .Replace“Search5”,“Text5”,xlPart .Replace“Search6”,“Text6”,xlPart .Replace“Search7”,“Text7”,xlPart

结束