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

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

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

这些是参数:

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

我希望我已经给你足够的信息…在此先感谢!

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

转到Excel中的可视化基本编辑器按Alt + F11,在项目窗口插入一个新的模块,并粘贴下面的代码:

 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在任何单元格中input1假设“F2”,而您的非连续范围是“testrange”

然后通过在任何空白单元格中input以下内容来使用上述function:

 =countif_n(testrange, F2) 

我同意Kartik的VBA解决scheme是必需的。 然而,提供的解决scheme有点低效,因为它循环传递给函数的范围中的每个单元格。 它还将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或更高版本。 如果使用CountIfs版本, CountIfsCountIfreplaceCountIf

虽然COUNTIF不能处理不连续的范围,但是某些函数可以是RANK和COUNT,所以对于Range范围,这个公式将给出Z2范围内一个数字实例的数量

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

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

如果S7以下的内容不能被计算,这可能不太合适,但是你也许可以修改。 它也不包含命名的范围。

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

这个例子计算2的数量。

这需要按ctrl-shift-enter进行数组ctrl-shift-enter 。 这是基于你在其他栏目中的数据,至less在你的例子中。 此外,虽然你提到的列是不同的高度,但看起来像所有除了S是相同的高度。 所以也许有办法解决这个问题。