Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何在多个列中查找公式中的特定文本(基于列标题名称)并替换为不同的文本_Excel_Vba - Fatal编程技术网

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