Excel 如何在多个列中查找公式中的特定文本(基于列标题名称)并替换为不同的文本
我正在尝试使用以下代码,以便: 使用Excel 如何在多个列中查找公式中的特定文本(基于列标题名称)并替换为不同的文本,excel,vba,Excel,Vba,我正在尝试使用以下代码,以便: 使用 标题名称:“RmRf”和“UMD” 一旦找到“AMJ”,就应该用“ABC”替换 我读过的大多数代码(在搜索上述解决方案时)都使用列编号而不是列标题,但我的工作表每月都会更新,因此列编号会发生变化,这就是我希望使用列标题名称的原因(在本例中为“RmRf”和“UMD”) 为什么不直接使用?你有3个循环,这就是为什么你的代码需要这么长时间才能运行的原因。好吧,看起来上面的代码实际上可以运行-但运行起来需要很长时间-我想超过15分钟,这没有意义,因为我可以更快地手动
标题名称:“RmRf”和“UMD” 一旦找到“AMJ”,就应该用“ABC”替换 我读过的大多数代码(在搜索上述解决方案时)都使用列编号而不是列标题,但我的工作表每月都会更新,因此列编号会发生变化,这就是我希望使用列标题名称的原因(在本例中为“RmRf”和“UMD”)
为什么不直接使用?你有3个循环,这就是为什么你的代码需要这么长时间才能运行的原因。好吧,看起来上面的代码实际上可以运行-但运行起来需要很长时间-我想超过15分钟,这没有意义,因为我可以更快地手动查找和替换上面的两列。在我的工作表中,两列“RmRf”和“UMD”分别是ATF列和ATG列,因此在上面的代码中,我认为我需要使用I=1到2000(因为ATF列号为1202,ATG列号为1203)。您知道如果可以做些什么来实现相同的结果,但让代码运行得更快(但仍然使用列标题名),您根本不需要循环。使用
Application.Match
按标题查找列。感谢您提供的范围。替换建议。我是VBA新手,我可以修改上面的代码,使之成为使用范围。替换还是我需要使用其他代码?您必须摆脱循环方法,因此这将是一个重大的修改。但是,正如前面提到的,您不需要循环。
Public Sub FindAndConvert()
Dim i As Integer
Dim lastRow As Long
Dim myRng As Range
Dim mycell As Range
Dim MyColl As Collection
Dim myIterator As Variant
Set MyColl = New Collection
MyColl.Add "RmRf"
MyColl.Add "UMD"
lastRow = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For i = 1 To 2000
For Each myIterator In MyColl
If Cells(1, i) = myIterator Then
Set myRng = Range(Cells(2, i), Cells(lastRow, i))
For Each mycell In myRng.SpecialCells(xlFormulas)
mycell.Formula = Replace(mycell.Formula, "AMJ", "ABC")
Next
End If
Next
Next
End Sub