循环中存在类型不匹配错误的VBA Replace()

循环中存在类型不匹配错误的VBA Replace(),vba,excel,loops,for-loop,Vba,Excel,Loops,For Loop,我对VBA相当陌生,我只是尝试用“0”替换列“N”和“O”中的任何字符“NA”、“ZZ”、“Z”。下面是一个带有if语句的循环,但出于某种原因,我一直在 运行时13错误,类型不匹配 有人能帮我纠正这个错误吗 谢谢 Dim v as String sym = Array("NA", "ZZ", "Z") If Worksheets("Sheet1").Columns("N") Then For Each a In sym v = Replace(v, a, "0") Ne

我对VBA相当陌生,我只是尝试用“0”替换列“N”和“O”中的任何字符“NA”、“ZZ”、“Z”。下面是一个带有
if
语句的循环,但出于某种原因,我一直在

运行时13错误,类型不匹配

有人能帮我纠正这个错误吗

谢谢

Dim v as String
sym = Array("NA", "ZZ", "Z")

  If Worksheets("Sheet1").Columns("N") Then
   For Each a In sym
    v = Replace(v, a, "0")
   Next a

 ElseIf Worksheets("Sheet1").Columns("O") Then
   For Each a In sym
     v = Replace(v, a, "0")
   Next a

 End If

你可以这样做。这是一个很好的实践,可以指定


你可以这样做。这是一个很好的实践,可以指定


您不需要在单元格上循环,请尝试:

Sub lydias()
    With Sheets("Sheet1").Range("N:O")
        .Replace What:="NA", replacement:="0"
        .Replace What:="ZZ", replacement:="0"
        .Replace What:="Z", replacement:="0"
    End With
End Sub

您不需要在单元格上循环,请尝试:

Sub lydias()
    With Sheets("Sheet1").Range("N:O")
        .Replace What:="NA", replacement:="0"
        .Replace What:="ZZ", replacement:="0"
        .Replace What:="Z", replacement:="0"
    End With
End Sub
试试这个:

Sub test()

Dim sym As Variant
sym = Array("NA", "ZZ", "Z")

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")

Dim colums_range As Range

With ws
Set colums_range = Union(.Columns("N").SpecialCells(xlCellTypeConstants), .Columns("O").SpecialCells(xlCellTypeConstants))
End With

   For Each element In sym

    colums_range.Replace What:=CStr(element), Replacement:="0", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
    ReplaceFormat:=False

   Next element

End Sub
试试这个:

Sub test()

Dim sym As Variant
sym = Array("NA", "ZZ", "Z")

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")

Dim colums_range As Range

With ws
Set colums_range = Union(.Columns("N").SpecialCells(xlCellTypeConstants), .Columns("O").SpecialCells(xlCellTypeConstants))
End With

   For Each element In sym

    colums_range.Replace What:=CStr(element), Replacement:="0", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
    ReplaceFormat:=False

   Next element

End Sub

如果工作表(“Sheet1”).Columns(“N”),那么您打算用
@ScottCraner定义第N列。我只想替换第N列和第O列中出现的数组
sym
中的字符。也许有更有效的方法吗?
工作表(“Sheet1”)。Columns(“N”)
不返回布尔值。v是空字符串,因此,无论循环多少次,它都将保持为空字符串。如果工作表(“Sheet1”).Columns(“N”)中出现
,那么您打算用
@ScottCraner定义N列。我只想替换N列和O列中出现的数组
sym
中的字符。也许有更有效的方法可以做到这一点?
工作表(“Sheet1”).Columns(“N”)
不返回布尔值。而v是一个空字符串,因此无论循环多少次,它都将保持为空字符串。如果定义
范围(“N:O”)
是否意味着从N到O选择列。如果我只需要执行N列和O列中的操作,不包括介于两者之间的操作,该怎么办?它不应该是
范围(“N,O”)
?呃?在N和O之间没有圆柱。天哪…太阳在烤我的大脑。。哈哈XD。。。谢谢你的提醒。没关系,有一件事我很有信心,那就是我的字母表。它在上面的链接中——下面有一个例子。如果您被卡住了,请返回。如果您定义了
范围(“N:O”)
是否意味着从N到O选择列。如果我只执行N和O列中的操作,不包括介于两者之间的操作,该怎么办?它不应该是
范围(“N,O”)
?呃?在N和O之间没有圆柱。天哪…太阳在烤我的大脑。。哈哈XD。。。谢谢你的提醒。没关系,有一件事我很有信心,那就是我的字母表。它在上面的链接中——下面有一个例子。如果你被卡住了就回来。