【问题标题】:Find and Replace Formula Needed in Excel在 Excel 中查找和替换所需的公式
【发布时间】:2014-03-21 13:23:16
【问题描述】:

我在替换 Excel 工作表中的数据时遇到了一个大问题。主工作表中有超过 6000 个关键字和超过 300000 行。我必须在原始文本行的下一行替换这些关键字。我正在尝试这个公式:

Sub ReplaceExample()

Dim OriginalText As String
Dim CorrectedText As String

OriginalText = Range("A2").Value
CorrectedText = Replace(OriginalText, "left", "Left")
CorrectedText = Replace(OriginalText, "limited", "Limited")


Range("A2").Offset(, 1).Value = CorrectedText 
End Sub

但是我遇到了Range() 的问题。 我在 Excel 表中有一个巨大的数据范围。

我可以对所有这些替换使用一个公式吗???

例如:这是原始文本单元格编号 (A2:A12) 的示例数据

00-00 Buick Lesabre (limited) headlight Set;
00-00 Buick Lesabre Tail Light left;
00-00 Buick Lesabre Tail Light Pair;
00-00 Buick lesabre tail Light Right;
00-00 Buick Lesabre Tail Light Set;
00-00 Dodge /Plymouth Neon Fog Light Pair;
00-00 Dodge caravan/Plymouth voyager/ Chrysler towncar(W/ Quad) Headlight Left;
00-00 Dodge Caravan/voyager /Towncar(W/O Quad&Dtrl)Headlight Set;
00-00 Dodge/Plymouth Neon Fog Light Left;
00-00 Dodge/Plymouth Neon Fog Light Right;
2000 Nissian 350z;

关键字单元格编号 (A2:A8)

Limited;
Left;
Lesabre;
Caravan;
Voyager;
350Z;
Towncar

我需要尽快解决。

【问题讨论】:

  • 必须是 VBA 解决方案吗?为什么不直接使用 Control F 来执行查找/替换?
  • 那么他必须这样做 6000 次对吗?
  • 您将不得不合并 .FindNext 和 .Replace 来完成此操作。从本网站上的代码开始:msdn.microsoft.com/en-us/library/office/…

标签: vba excel excel-formula


【解决方案1】:

这样做:

在开头插入2列,在A列中放置所有关键字。在 b 列中放置所有替换项。从第一行的顶部开始。然后使用这个宏:

Sub macro1()


    Dim rng As Range
    Set rng = thisWorkbook.Activesheet.Range("A1")'uses thisWorkbook and Activesheet such that this macro will work regardless of the name of the sheet or workbook.
    While rng.FormulaR1C1 <> "" 'processes untill a blank cell is encountered
        Cells.Replace What:=rng.FormulaR1C1, Replacement:=rng.Offset(0, 1), LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
        Set rng = rng.Offset(1, 0)
    Wend

End Sub

您需要将此宏粘贴到与当前宏下已有的模块相同的模块中。或者,您可以简单地删除宏中Sub ReplaceExample()end sub 之间的所有内容,然后复制我的示例中Sub macro1()end sub 之间的所有内容并将其粘贴到您的代码所在的位置。

【讨论】:

  • 如果需要,请将 Range("A1").Activate 更改为 A2。
  • 您应该避免使用.ActivateActiveCell,因为这可能会导致不稳定并减慢进程。 This post 描述了一些关于这个问题的解决方案。
  • 你是对的,通常我会完全避免这种情况。但我不认为 OP 会在今天之后再看一遍,而且我很确定这不是我们在这里构建的一些深度功能,所以如果他们在一开始就坚持 application.screenupdating = false 它应该可以正常运行他们需要。
  • +1 如果您明确定义 Range("A1")(即:ThisWorkbook.Worksheet("Sheet1").Range...Me.Range... 或其他),并且您解释在哪里粘贴此宏与您的 Range("A1") 定义一致
  • 下定决心要让我当老师是吗?编辑完成:P
猜你喜欢
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 2017-09-04
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 2016-08-24
相关资源
最近更新 更多