我正在寻找在非连续范围内计算相同数值的最优雅方法(我将其称为'范围')。这是范围:
=$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
这些是参数:
我希望我已经给你足够的信息......提前致谢!
答案 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之外的所有列都是相同的高度。所以也许有办法解决这个问题。