Vba 扫描范围查找值,并在条件满足时保留空白(或零)
我有以下代码:Vba 扫描范围查找值,并在条件满足时保留空白(或零),vba,excel,Vba,Excel,我有以下代码: 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 E
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
我的目标是在该范围内找到所有值为3或1的单元格,并在满足条件时留空(或用0填充),但这不起作用,没有错误消息或输出 我认为Excel
Replace All
可以简单地实现这一点,而您不需要宏来实现这一点
如果您仍在寻找宏代码,请尝试下面的代码。我尝试了下面的代码,它在我的示例数据中运行良好
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
我认为Excel
Replace All
可以简单地实现这一点,而您不需要宏来实现这一点
如果您仍在寻找宏代码,请尝试下面的代码。我尝试了下面的代码,它在我的示例数据中运行良好
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
可以对数组上的每个循环使用,但只能访问数组中的元素而不能替换它们,因为只能获取值,而不能获取引用
如果不想使用数组,可以对每个循环使用:
Dim c As Range
For Each c In rng
If c.Value = "3" Or c.Value = "2" Then
c.Value = ""
End If
Next c
替换方法可能是最快的,尽管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
可以对数组上的每个
循环使用,但只能访问数组中的元素而不能替换它们,因为只能获取值,而不能获取引用
如果不想使用数组,可以对每个循环使用:
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方法可能是最快的方法,但是对于一种方法,您只在第一列上循环。还有,你为什么要这样定义rng
?您知道&
操作员的工作吗?它只是连接字符串,所以如果您使用的范围有89行,rng
将一直到第8989行。忘记删除该行了&。那么,我应该改变什么来扫描整个范围呢?首先,你只是在第一列上循环。还有,你为什么要这样定义rng
?您知道&
操作员的工作吗?它只是连接字符串,所以如果您使用的范围有89行,rng
将一直到第8989行。忘记删除该行了&。那么,我应该改变什么来扫描整个范围呢?如果你直接在单元格中循环,你可以对rng中的每个单元格使用。然而,你应该调暗你的变量。您也不应该将行
等属性用作variables@arcadeprecinct,感谢分享您的意见。我将结合您的最佳实践修改答案看起来(几乎)不错,但您仍然没有声明cellval
。查看文档中的选项Explicit
部分:@arcadeprecinct,我的错,我错过了,再次感谢,我将修改它。如果您直接在单元格中循环,您可以对rng中的每个单元格使用。然而,你应该调暗你的变量。您也不应该将行
等属性用作variables@arcadeprecinct,感谢分享您的意见。我将结合您的最佳实践修改答案看起来(几乎)不错,但您仍然没有声明cellval
。查看文档中的选项Explicit
部分:@arcadeprecinct,我的错,我错过了,再次感谢,我会修改它。