所以我设置了以下VBA循环,但是想要添加一行“如果此范围内有两个单元格具有值,请执行此操作。如果某个范围内有三个单元格具有值, 去做。”到目前为止我所拥有的是:
Sub Test1()
Dim Rng As Range
Dim i As Long
i = 3
Application.ScreenUpdating = True
While i <= 133
Set Rng = Range("C" & i)
If Rng.Offset(, 2).Resize(, 7) <> "" Then
Rng.Offset(, 1).FormulaR1C1 = "Blank"
i = i + 1
Else: Stop
End If
Wend
End Sub
所以如果此范围为空,我将VBA脚本打印到相应单元格中的“Blank”。但是如何添加更多行来说“如果此范围中的一个单元格包含值”,或“如果此范围内的两个单元格包含值”
答案 0 :(得分:2)
以下是检查给定范围内是否有多个非空单元格的方法:
If Application.WorksheetFunction.CountA(Rng.Offset(, 2).Resize(, 7)) > 1 Then
您的代码的其他一些提示:
如果您确切知道i
的初始值和最终值,则应使用For ... Next
循环而不是While ... Wend
。所以你可以替换这段代码:
i = 3
'(...)
While i <= 133
'(...)
i = i + 1
Wend
用这个:
For i = 3 To 133
'(...)
Next i
我认为这行代码会导致类型不匹配错误:
If Rng.Offset(, 2).Resize(, 7) <> "" Then
因为您正在尝试将Range
类型的对象与原始值(空字符串)进行比较。要避免此问题,您可以使用与上面类似的代码:
If Application.WorksheetFunction.CountA(Rng.Offset(, 2).Resize(, 7)) = 0 Then
答案 1 :(得分:1)
您可能希望沿着这些行添加代码
Select case Application.WorksheetFunction.CountA(Rng.Offset(, 2).Resize(, 7))
case 0
Rng.Offset(, 1).value = "Blank"
case 1
Rng.Offset(, 1).value = "Only One"
case >2
Rng.Offset(, 1).value = "More than 1"
end select