在VBA中,我想为一个范围中的多个单元格包含值时创建一个If语句

时间:2015-08-05 11:12:59

标签: excel vba excel-vba

所以我设置了以下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”。但是如何添加更多行来说“如果此范围中的一个单元格包含值”,或“如果此范围内的两个单元格包含值”

2 个答案:

答案 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