【问题标题】:In VBA, I want to make an If statement for when more than one cell in a range contains a value在 VBA 中,我想为一个范围内的多个单元格包含一个值时创建一个 If 语句
【发布时间】:2015-08-05 11:12:59
【问题描述】:

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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    以下是检查给定范围内是否有多个非空单元格的方法:

    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
      
    • 我认为这行代码会导致Type mismatch错误:

      If Rng.Offset(, 2).Resize(, 7) <> "" Then
      

      因为您试图将Range 类型的对象与原始值(空字符串)进行比较。为避免此问题,您可以使用与上述类似的代码:

      If Application.WorksheetFunction.CountA(Rng.Offset(, 2).Resize(, 7)) = 0 Then
      

    【讨论】:

    • 优秀。感谢您的帮助!
    【解决方案2】:

    您可能希望按照这些代码添加代码

    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
    

    【讨论】:

      猜你喜欢
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      相关资源
      最近更新 更多