2012-06-16 268 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或更高版本,但可以修改在早期版本的工作