【问题标题】:Non-consecutive range in excel functionexcel函数中的非连续范围
【发布时间】:2015-09-12 09:14:25
【问题描述】:

我有一个 Excel 表格,分别是 A1 = "YES"B1 = "YES"C1 = "YES"。我想知道我的表中有多少个“是”,这很容易用=COUNTIF(A1:C1,"YES") 解决,它会准确地给我3 的答案。

   A    B    C   
1 YES  YES  YES

但是,如果想知道 A1 和 C1 中有多少“是”而忽略 B1 中的任何内容,那就很棘手了。同样的函数给我 3 而我希望它给我 2 作为答案,因为我只想计算 A1 和 C1。

我想知道是否有一种方法可以管理数据,以便我只能使用那种不连续的单元格?我发现一个解决方案是使用像=if(A1="YES",1)+if(C1="YES",1) 这样的东西,它就像一个魅力,因为它总是会给我正确的答案;然而,这并不是一个令人满意的解决方案,因为尽管我的示例很简单,但我的实际情况需要从 500 个范围中为几种不同的组合编写大约 100 个单元格,这可能会变得有些繁重。

我尝试使用名称范围,但似乎 if 函数不允许我按照我想要的方式使用它们。因此,任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 是的,像 COUNTIF 这样的函数有限制,就像所有东西一样,如果它的列基于为什么不在你想要包含的每一列的底部COUNTIF 然后对总数求和?
  • CountIf 显示为 not support non-consecutive ranges
  • 列错列是否有规律? MOD(COLUMN(), x) 其中 x 标识可以使用交错。需要比“500 个范围中的大约 100 个单元格”更多的信息。
  • 您要测试的单元格的位置是否有任何模式?

标签: excel vba


【解决方案1】:

如果 VBA 是一个选项并且“excel 函数中的非连续范围”是一个问题,那么您可以创建一个 User Defined Function,它接受一个 ParamArray 并返回一个包含所有给定参数的数组。

例子

Public Function getMatrix(ParamArray aValues() As Variant) As Variant
 Dim i As Long
 Dim aReturnValues() As Variant
 For Each vValue In aValues
  For Each vSingleValue In vValue ' possible the vValue is also an array
   ReDim Preserve aReturnValues(i)
   aReturnValues(i) = vSingleValue
   i = i + 1
  Next
 Next
 getMatrix = aReturnValues
End Function

然后可以这样使用:

A4中的公式:

=SUMPRODUCT(--(getMatrix(A1,C1,E1:G1,D2:E3)="Yes"))

注意,UDF 返回的是一个数组,而不是 Range。这就是为什么我们不能使用COUNTIFCOUNTIF 需要 Range 作为第一个参数。

【讨论】:

    【解决方案2】:

    当您在 Excel 中具有其他功能时,为什么还要寻找公式?添加一行 (#2),并让 A2=1、B2=0、C2=1 直到最后一列[拖动它以填充,确保复制单元格]。然后选择行并在状态栏中查看总和。

    【讨论】:

      【解决方案3】:

      看看this 线程。基本上你需要的是这样的:

      =SUM(COUNTIF(INDIRECT({"A1:A10","C1:c10"}),"a"))
      

      或者只是使用多个 COUNTIF,然后添加它们。 (Countif(...) + countif(...) 等)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-19
        • 1970-01-01
        • 2017-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多