2

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

=$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

4 回答 4

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 或更高版本。如果使用更早的版本,请替换CountIfsCountIf

于 2012-06-16T23:01:06.483 回答
1

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

按 Alt+F11 转到 Excel 中的 Visual Basic 编辑器,在项目窗口中插入一个新模块并粘贴以下代码:

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 是您的非连续范围,而 key 表示包含您要计算的值的“范围”(单元格)。例如,要检查 1 在任何单元格中输入 1 假设“F2”,并且您的非连续范围是“testrange”

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

=countif_n(testrange, F2)
于 2012-06-16T16:53:23.773 回答
1

尽管 COUNTIF 不能处理非连续范围,但某些函数可以,例如 RANK 和 COUNT,因此对于称为Range的范围,此公式将给出 Z2 中某个数字在Range内的实例数

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

假定 Excel 2007 或更高版本,但可以修改为在早期版本中工作

于 2012-06-17T13:42:14.523 回答
0

如果 S7 以下的东西无法计数,这并不完全有效,但您可以修改。它也不包含命名范围。

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

此示例计算 2 的数量。

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

于 2012-06-16T18:35:38.327 回答