2012-06-16 275 views
2

我正在寻找最优雅的方法来计算非连续区域中的相同数值(我将其称为“范围”)。这是范围: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 

这些是参数:

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

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

回答

1

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

转到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是你的非contigous范围和重点代表“范围”(单元格),其中包含您要计数的值。对于例如,检查1在任意单元格中输入1允许假设“F2”,和您的非contigous范围是“testrange”

然后通过输入任意空白单元格下面用上面的功能:

=countif_n(testrange, F2) 
+0

surel Ÿ这是复杂的情况 – whytheq

+0

谢谢,我想VBA是答案呢! :) – Daan

0

如果S7下面有东西不能计数,但是您可能可以修改,这并不是很有效。它也不包含命名的范围。

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

这个例子计算2的数量。

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

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版本使用具有CountIf

+0

+1哇这真是太好了。 –

+0

如何在将非连续范围放入函数中时对其进行格式化? – xxxRxxx

1

取代CountIfs虽然COUNTIF不能处理非连续范围的一些功能可以,例如RANK和计数,以便为一个名为范围范围这一公式将给出的实例的数量范围

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

内的数Z2假定Excel 2007或更高版本,但可以修改在早期版本的工作