在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 

    因为您正在尝试将Rangetypes的对象与原始值(空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