excel函数中的非连续范围

时间:2015-09-12 09:14:26

标签: excel vba

我有一个excel表格A1 = "YES"B1 = "YES"C1 = "YES"。我想知道我的表中有多少“YES”,这可以通过=COUNTIF(A1:C1,"YES")轻松解决,它会准确地给出3的答案。

   A    B    C   
1 YES  YES  YES

但是如果想知道在A1和C1中有多少“YES”而忽略了B1有什么变得棘手。同样的功能给了我3,而我希望它给我2作为答案,因为我想只计算A1和C1。

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

我尝试使用名称范围,但似乎if函数不允许我按照我想要的方式使用它们。所以任何帮助都会被贬低,谢谢。

3 个答案:

答案 0 :(得分:0)

如果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

然后可以使用它:

enter image description here

A4中的公式:

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

查看this主题。基本上你需要的是这样的东西:

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

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