Excel:在非连续范围内计算相同的数字值

时间:2012-06-16 16:13:45

标签: excel excel-vba vba

我正在寻找在非连续范围内计算相同数值的最优雅方法(我将其称为'范围')。这是范围:

=$C$2:$C$31,$E$2:$E$31,$G$2:$G$31,$I$2:$I$31,$K$2:$K$31,$M$2:$M$31,$O$2:$O$31,$Q$2:$Q$31,$S$2:$S$7

这些是参数:

  • 范围包含不相邻的列。
  • 列的高度不同。
  • 范围内的单元格为空或包含整数。
  • 我正在检查有多少单元格等于'1',多少等于'2'等等。 (不是一气呵成,而是单独的公式)。
  • 我使用了一个命名范围来引用该范围。我真的很想以这种或那种方式在公式中使用这个命名范围。

我希望我已经给你足够的信息......提前致谢!

4 个答案:

答案 0 :(得分:4)

我同意Kartik需要VBA解决方案。然而,所提供的解决方案效率稍低,因为它循环遍历传递给函数的范围中的每个单元格。它还将key参数限制为范围引用,并且最多只能计数32767个匹配项。这是另一种解决这些缺点的方法

Function CountIf_N(rng As Range, key As Variant) As Variant
    Dim r As Range
    Dim count As Long
    count = 0
    For Each r In rng.Areas
        count = count + WorksheetFunction.CountIfs(r, key)
    Next
    CountIf_N = count
End Function

注意:假定Excel 07或更高版本。如果使用ealier版本,请将CountIfs替换为CountIf

答案 1 :(得分:1)

一种方法是使用内置功能Countif的excel,但它不适用于非连续范围。另一种方式(简单方法)是使用VBA创建自己的自定义功能,然后在excel中使用它。
我在这里介绍了这种技术。

通过按Alt + F11转到excel中的visual basic editor,在项目窗口中插入一个新模块并粘贴下面的代码:

Function countif_n(rng As Range, key As Range) As Integer

Dim count As Integer
count = 0

For Each cell In rng
    If cell.Value = key.Value Then
        count = count + 1
    End If
Next cell

countif_n = count

End Function  

此处rng是您的非连续范围,键代表“范围”(单元格),其中包含您要计算的值。例如,要检查1在任何单元格中输入1,请设为“F2”,并且您的非连续范围为“testrange”

然后在任何空白单元格中输入以下内容使用上述功能:

=countif_n(testrange, F2)

答案 2 :(得分:1)

虽然COUNTIF无法处理非连续范围,但某些函数可以,例如RANK和COUNT,因此对于名为范围的范围,此公式将给出Z2中数字的实例数。强>范围

=IFERROR(COUNT(Range)-SUM(RANK(Z2,Range,{1,0}))+2,0)

假设Excel 2007或更高版本,但可以修改为在早期版本中使用

答案 3 :(得分:0)

如果S7下面的东西无法计算,这可能无法正常工作,但您可以修改。它也没有包含命名范围。

=SUM(IF(MOD(COLUMN(A2:S31),2)=0,IF(A2:S31=2,1,0)))

此示例计算2的数量。

这需要使用ctrl-shift-enter进行数组输入。它基于这样一个事实:至少在您的示例中,您计算​​其他所有列。此外,虽然你提到的列是不同的高度,但看起来除了S之外的所有列都是相同的高度。所以也许有办法解决这个问题。