VBA Excel查找范围内的单词并替换

9

我想用另一个单词替换列中的单词,但我的代码似乎不起作用,我仍在努力掌握编程语言,但对我来说它并不直观。

情况:

Global Macro - Equities
Global Macro - Bonds
Global Macro - FX
.
.
.
And so on...

希望的结果:
GM - Equities
GM - Bonds
GM - FX
.
.
.

我的代码

Sub ReplaceFundNames()

    Dim FundName As String
    Dim CorrectedName As String
    Dim ws As Worksheet
    Dim LastRow As Long

    Set ws = ActiveSheet
    LastRow = Range("B" & Rows.Count).End(xlDown).Row

    FundName = Range(LastRow)
    CorrectedName = Replace(FundName, "Global Macro", "GM")

    Range("B" & LastRow).Value = CorrectedName


End Sub

谢谢!


您的代码正在活动工作表中对单元格 B1048576 进行替换,仅当该单元格包含 "Global Macro" 时才进行替换。 - ThunderFrame
1个回答

13

VBA中的Replace函数是设计用于单个字符串,而Range.Replace方法是设计用于Range

因此,您可以在一个语句中执行替换:

ActiveSheet.Range("B:B").Replace "Global Macro", "GM"


你的意思是用这个单一语句替换上面的整段代码吗? - Eugene Foo
是的。你可以缩小到使用的行数,但假设在你需要替换值的范围上方或下方没有任何数据,则上面的代码行就足够了。重要的是你要使用 Range.Replace 方法而不是 VBA.Replace 函数。 - ThunderFrame
啊好的,感谢这个提示。 然而,我尝试了这段代码,但是出现了以下错误信息: “编译错误: 预期函数或变量”。 - Eugene Foo
如果您在Sub ReplaceFundNames()行和End Sub行之间使用了该行,我看不出任何可能导致编译错误的方法。您确定没有打错字,或者代码中没有其他错误吗?ActiveSheet.Range("B:B").Replace "Global Macro", "GM" 将会 生效,除非您没有活动工作表。 - ThunderFrame
1
好的,我在一个新的电子表格上尝试了一下,非常完美,非常感谢! - Eugene Foo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接