【问题标题】:VBA to check for blank cells in columns based on value in another columnVBA根据另一列中的值检查列中的空白单元格
【发布时间】:2013-09-15 17:20:10
【问题描述】:

给定

O    1    2    3   A
A    4    5    6   B
B    7    8    9   D
     O             3
     C            15
     T            18

我正在寻找 VBA 代码来验证当 A 列包含一个值时,其余列也包含值,而当它不包含值时,第 2 列和第 5 列也包含值,但第 3 列和第 4 列不包含值t.

我已经简化了这个例子,在一个真实的工作表中会有更多的列和行需要检查。

我考虑过 COUNTIF 和 INDEX/MATCH 以及数组论坛,但据我了解,这些都一次只在单个列上工作。

我想做类似 WHEN A1:An"" THEN COUNTBLANK(B:E) ELSE COUNTA (C:D)

使用自动过滤器的最佳方式是在 A 中使用空格,然后使用 countblank,然后对 A 中的值使用第二个自动过滤器。

谢谢

【问题讨论】:

  • 你真的不需要 vba。尝试将=IF(LEN(A1)>0,COUNTA(B1:E1)=4,AND(COUNTA(B1,E1)=2,COUNTA(C1:D1)=0)) 复制到每一行。如果行有效则返回 true,否则返回 false。
  • 或者对于一个告诉您是否有任何行未验证的一次性公式,然后尝试=(COUNTIFS(A1:A4,"",B1:B4,"<>",E1:E4,"<>",C1:C4,"",D1:D4,"")+COUNTIFS(A1:A4,"<>",B1:B4,"<>",C1:C4,"<>",D1:D4,"<>",E1:E4,"<>"))=ROWS(A1:A4)

标签: vba excel


【解决方案1】:

您可以使用几个嵌套的 IF 公式来完成,如下所示:

=IF(A1<>"",
    "A not empty, "&IF(COUNTBLANK(B1:E1)=0,
                       "B:E not blank",
                       "B:E have blanks"),
    "A blank, "&IF(AND(COUNTBLANK(B1)+COUNTBLANK(E1)=0,
                       COUNTBLANK(C1)+COUNTBLANK(D1)=2),
                   "Columns 2&5 have values and Columns 3&4 don't",
                   "but condition not met"))

【讨论】:

    【解决方案2】:

    走 VBA 路线的原因是我想要一个通用的可重用函数,而不是我在单元格和工作表之间复制的公式,沿途更改列等,最终导致大量重复代码。

    所以需要一个列来测试和一个值来测试它。第三个参数是要验证的列范围,第四个参数是验证。

    我不希望有任何解决方案对列进行硬编码,也不希望在行尾出现中间总计。这在 Excel 本身中很容易实现...

    尝试使用 countblank 的原因是我可以将其应用于范围。

    经过大量搜索,我发现了这一点(列与原始示例不匹配)

    =SUMPRODUCT((A2:A19<>"")*(B2:D19=""))
    =SUMPRODUCT((A2:A19="")*(D2:D19=""))
    =SUMPRODUCT((A2:A19="")*(B2:C19<>""))
    

    不错吧?我现在只需要把它转换成 VBA。

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-09
      • 2017-09-18
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多