在满足条件时,扫描测距值并保留空白(或零)

我有以下代码:

Sub DELETE2() Dim dat As Variant Dim rng As Range Dim i As Long Set rng = Range("C12:K89") dat = rng For i = LBound(dat, 1) To UBound(dat, 1) If dat(i, 1) = "3" Or dat(i, 1) = "2" Then dat(i, 1) = "" End If Next rng = dat End Sub 

我的目标是在该范围内find所有值为3或1的单元格,并在满足条件时保留空白(或用0填充),但这不起作用,没有错误消息或输出。

我认为Excel Replace All就是简单的,你不需要一个macros来做这个。

如果你仍然在寻找macros代码尝试下面的一个。 我试了下面的代码,它对我的​​样品数据工作正常。

 Sub DELETE2() Dim rng As Range Dim cellval As Variant Set rng = Range("C12:K89") For Each cellval In rng.Cells If (cellval .Value = "3" Or cellval .Value = "2") Then cellval .Value = "" Next cellval End Sub 

Siva已经给出了答案,但是这里有一个“修正”你的代码的方法:

要遍历整个数组,请为该列使用第二个参数

 Dim i As Long Dim j As Long '... For i = LBound(dat, 1) To UBound(dat, 1) For j = LBound(dat, 2) To UBound(dat, 2) If dat(i, j) = "3" Or dat(i, j) = "2" Then dat(i, j) = "" End If Next j Next i 

您可以在数组上使用For Each循环,但只能访问数组中不能replace的元素,因为您只获取值,而不是引用。

如果你不想用数组来实现,可以使用For Each循环:

 Dim c As Range For Each c In rng If c.Value = "3" Or c.Value = "2" Then c.Value = "" End If Next c 

replace方法可能会是最快的