Excel VBA迭代所有使用过的单元格并替换它们的值

时间:2016-01-28 16:11:15

标签: excel vba excel-vba

这是我第一次使用VBA和Excel,我的问题可能是由于我缺乏知识。

我有一个城市名称的列列表(包含800个项目,因此我希望自动替换它们)和一些文本块,其中术语“cityname”多次出现,需要使用正确的城市名称替换,在我的设置中,该名称将是同一行中第一个列单元格的

所以我发现了这个:How to iterate through all the cells in Excel VBA or VSTO 2005

通过查看Excel VBA参考找到 InStr 替代函数。

使用像这样的迭代可以正常工作:

Sub MySubstitute()
    Dim cell As Range
        For Each cell In ActiveSheet.UsedRange.Cells
            If InStr(cell.Value, "cityname") > 0 Then
                MsgBox "Hello World!"
        End If
    Next cell
End Sub

我的工作表中的每个“cityname”都有一个消息框(只有2行的测试表)。

然而,当我添加我真正想要实现的内容时,我得到运行时错误(1004)

Sub MySubstitute()
    Dim cell As Range
    For Each cell In ActiveSheet.UsedRange.Cells
        If InStr(cell.Value, "cityname") > 0 Then
            cell.Value = WorksheetFunction.Substitute(cell.Value, "cityname", Cells(cell.Row, A))
        End If
    Next cell
End Sub

所以我想这行中的某些内容是错误的,但我无法弄清楚是什么。任何关于我的错误的提示都表示赞赏,谢谢:)

2 个答案:

答案 0 :(得分:2)

您可以使用Range.Replace方法并立即替换所有,无需迭代。

Sub MySubstitute()
    Dim rng As Range
    Set rng = ActiveSheet.UsedRange.Cells
    rng.Replace "cityname", "correctcityname", xlPart
End Sub

答案 1 :(得分:1)

你应该改变:

 cell.Value = WorksheetFunction.Substitute(cell.Value, "cityname", Cells(cell.Row, A))

通过

 cell.Value = WorksheetFunction.Substitute(cell.Value, "cityname", Cells(cell.Row, 1))