【问题标题】:Cells.Replace functions for similar wording类似措辞的 Cells.Replace 函数
【发布时间】:2020-06-23 22:03:53
【问题描述】:

我继承了一个 Excel 宏,用于我公司的银行存款。我能够逐行阅读并弄清楚宏是如何工作的。

32 位 Excel 抛出的 Cells.Replace 函数太多了

“编译错误:过程太大”。

我需要瘦下来。例如:

Cells.Replace What:="DIRECT DEPOSIT COMPANY A OF CALIFORNIA", Replacement:="COMPANY", LookAt:=xlPart, _
  SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
  ReplaceFormat:=False

Cells.Replace What:="DIRECT DEPOSIT COMPANY A UTAH SECTOR", Replacement:="COMPANY", LookAt:=xlPart, _
  SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
  ReplaceFormat:=False

两者都来自同一家公司,后来也被这样对待,但由于它们的名称略有不同,我一直在为每个人添加一个新功能。

我假设因为它使用的是“LookAt:=xlPart”,所以我可以说:

Cells.Replace What:="DIRECT DEPOSIT COMPANY", Replacement:="COMPANY", LookAt:=xlPart, _
  SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
  ReplaceFormat:=False

但我最终得到了“公司”,+ 后面附加了 What 函数中指定的所有内容。

是否有更简化的方法来查找以“DIRECT DEPOSIT COMPANY A”开头的所有单元格,忽略之后的任何内容,并仅替换为“COMPANY”?

【问题讨论】:

  • 这将有助于展示一些“之前”和“之后”的示例,以便清楚您想要什么作为预期结果。如果您收到“程序太大”,这表明您的 Sub 需要完全重写:考虑将“查找”和“替换为”文本移动到工作表,然后让代码逐行读取该工作表并为每对值运行替换。

标签: excel vba


【解决方案1】:

以下是重复运行“replace all if starts with”替换的方法:

Sub tester()

    ReplaceStartsWith "COMPANY A", "COMPANY"
    ReplaceStartsWith "COMPANY B", "COMPANY"

End Sub



Sub ReplaceStartsWith(startsWith, replaceWith)
    Cells.Replace what:=startsWith & "*", replacement:=replaceWith, lookat:=xlWhole
End Sub

请注意,如果您不希望(例如)“COMPANY A”与“COMPANY ADVANCED”匹配,您可能需要在 startsWith 的末尾添加一个空格

【讨论】:

    猜你喜欢
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 2015-07-30
    相关资源
    最近更新 更多