在VBA中,我想为一个范围中的多个单元格包含一个值时创build一个If语句
所以我设置了下面的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脚本打印单词“空白”到适当的单元格,如果这个范围是空的。 但是,如何添加更多行来说“如果这个范围中的一个单元格包含一个值”,或者“如果这个范围内的两个单元格包含一个值”
以下是如何检查给定范围内是否有多个非空单元的情况:
If Application.WorksheetFunction.CountA(Rng.Offset(, 2).Resize(, 7)) > 1 Then
几个额外的提示你的代码:
-
如果你确切地知道我的初始值和最终值,你应该使用
For ... Next
循环而不是While ... Wend
。 所以你可以replace这个代码:i = 3 '(...) While i <= 133 '(...) i = i + 1 Wend
有了这个:
For i = 3 To 133 '(...) Next i
-
我认为这行代码会导致types不匹配错误:
If Rng.Offset(, 2).Resize(, 7) <> "" Then
因为您正在尝试将
Range
types的对象与原始值(空string)进行比较。 为了避免这个问题,你可以使用与上面类似的代码:If Application.WorksheetFunction.CountA(Rng.Offset(, 2).Resize(, 7)) = 0 Then
你可能喜欢沿着这些线添加代码
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