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

标签 vba excel

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

最佳答案

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

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
    

关于vba - 在 VBA 中,当范围中多个单元格包含一个值时,我想创建一个 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31830883/

相关文章:

excel - 形状复制粘贴时间问题 - Excel VBA

excel - 范围仅在从引用的工作表中调用时才有效

excel - 在用户窗体上显示 Excel 工作簿

excel - 使用 Excel vba 打开 PDF 文件并执行文本搜索

arrays - 加速数组公式

vba - 将整个工作表复制到 Excel 2010 中的新工作表

java - JXLS无法正确读取长度大于10的数字

excel - 打开工作簿时出现编译错误

vba - 通过自动调整将 Excel 范围发送到电子邮件正文

excel - 为什么在即时窗口中键入 MsgBox(0.5 mod 0.1) 时出现被零除的错误?