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
版本, CountIfs
用CountIf
replaceCountIf
虽然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是相同的高度。 所以也许有办法解决这个问题。