【问题标题】:Replacing values in multiple columns替换多列中的值
【发布时间】:2014-02-26 23:52:33
【问题描述】:

我是 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 个条目。

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

【问题讨论】:

    标签: excel replace multiple-columns vba


    【解决方案1】:

    这应该可以满足您的需求:

    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语句来扩展翻译表。

    【讨论】:

      【解决方案2】:

      按照我的帖子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:

      After running code:

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

      【讨论】:

        【解决方案3】:

        如果您的表设置没有数据间隙,则使用 UsedRange 是满足您需要的好方法。

        范围("C:C,F:F").Select 使用 ActiveSheet.UsedRange .替换“Search1”、“Text1”、xlPart .替换“Search2”、“Text2”、xlPart .替换“Search3”、“Text3”、xlPart .替换“Search4”、“Text4”、xlPart .替换“Search5”、“Text5”、xlPart .替换“Search6”、“Text6”、xlPart .替换“Search7”、“Text7”、xlPart 结束于

        【讨论】:

          猜你喜欢
          • 2022-01-22
          • 2016-08-26
          • 2021-01-05
          • 2023-02-25
          • 2016-03-29
          • 2020-06-15
          • 1970-01-01
          • 2023-01-13
          • 2018-08-04
          相关资源
          最近更新 更多