2012-08-09 169 views
113

這似乎是一個簡單的數據透視表來學習。我想爲我正在分組的特定值計算唯一值。簡單的數據透視表來計算唯一值

舉例來說,我有這樣的:

ABC 123 
ABC 123 
ABC 123 
DEF 456 
DEF 567 
DEF 456 
DEF 456 

我要的是一個數據透視表,顯示我:

ABC 1 
DEF 2 

,我只創建一個簡單的數據透視表給我這個(一多少行)數:

ABC 3 
DEF 4 

但我想唯一值的數量來代替。

我真正想要做的是找出第一列中的哪些值在所有行的第二列中沒有相同的值。換句話說,「ABC」是「好」,「DEF」是「壞」

我敢肯定有一個更簡單的方法來做到這一點,但認爲我會給數據透視表一個嘗試...

+7

注意,對於最近版本的Excel中,[這個答案](http://stackoverflow.com/a/21552440/983722)最方便。 – 2014-11-21 15:41:57

回答

92

插入第三列和細胞C2粘貼此式

=IF(SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))>1,0,1) 

並複製它。現在基於第1列和第3列創建您的數據透視表。見快照

enter image description here

+0

+1我認爲這比我的解決方案稍微簡單一點,因爲它不需要第一行的特殊值 – 2012-08-09 03:23:26

+2

Nice技巧。我不知道這個。你可以用一個數組函數'= IF(SUM((A $ 2:A2 = A2)*(B $ 2:B2 = B2))> 1,0,1)來做同樣的事情'(當按下Ctrl-Shift-Enter時輸入公式以便它獲取周圍的「{}」)。 – ErikE 2013-02-10 08:07:42

+0

通用答案,不需要任何特定功能。只是很好的普通公式。 – 2015-05-11 11:49:18

0

可以進行額外的列來存儲的獨特性,再總結在你的數據透視表。

我的意思是,單元格C1應始終爲1。單元格C2應包含公式=IF(COUNTIF($A$1:$A1,$A2)*COUNTIF($B$1:$B1,$B2)>0,0,1)。複製此公式,以便單元格C3將包含=IF(COUNTIF($A$1:$A2,$A3)*COUNTIF($B$1:$B2,$B3)>0,0,1)等等。

如果您有一個標題單元格,您需要將這些全部向下移動,並且您的C3公式應爲=IF(COUNTIF($A$2:$A2,$A3)*COUNTIF($B$2:$B2,$B3)>0,0,1)

-2

我發現這樣做的一個簡單的方法。參照Siddarth潰敗的例子,如果我希望計算在A列的唯一值:

  • 添加新的列C和與式填充C2 「= 1/COUNTIF($ A:$ A,A2)」
  • 拖動公式向下到列
  • 樞列A爲行標籤的其餘部分,總結{C列)中的值來獲得唯一值的數列A
+0

從邏輯上講,這不可能用於OP,因爲它沒有看'B'列。你將如何適應這個多列工作? – ErikE 2013-02-10 08:11:14

1

亞洲時報Siddharth的回答是了不起的。

但是,這項技術在處理大量數據時可能會遇到麻煩(我的電腦凍結了50,000行)。一些不太處理器密集的方法:

單唯一性檢查

  1. 排序由兩列(A,B在該示例中)
  2. 使用一個公式,着眼於以下數據

    =IF(SUMPRODUCT(($A2:$A3=A2)*($B2:$B3=B2))>1,0,1) 
    

多重唯一性檢查

如果您需要檢查不同列中的唯一性,則不能依賴兩種類型。

相反,

  1. 排序單塔(A)
  2. 添加式覆蓋的每個分組記錄的最大數目。如果ABC可能有50行,該公式將是

    =IF(SUMPRODUCT(($A2:$A49=A2)*($B2:$B49=B2))>1,0,1) 
    
+2

另一種可能更少的處理器密集型方式是添加一列C和C2'= A2&B2'。然後添加一個列D,並在D2中放入'= IF(MATCH(C2,C $ 2:C2,0)= ROW(C1),1,0)'。填補雙方。雖然這仍然是從整個範圍開始搜索,但它會在找到第一個時停止搜索,而不是將50,000行的值相乘在一起,只需要定位值 - 因此它應該表現得更好。 – ErikE 2013-02-10 08:14:58

+0

@ErikE Sharp - 我也認爲你的技術在第一次發現時停下來。但是如果你在C中有很多獨特的值(例如:只有50個ABC),你將繼續檢查大量的數據。很酷的功能:當數據未排序時,您的公式效果最佳。 – workglide 2013-02-10 12:54:01

0

如果你有數據整理..我建議用以下公式

=IF(OR(A2<>A3,B2<>B3),1,0) 

這是更快它使用較少的細胞計算。

8

我想拋出一個附加選項成沒有按」混合t需要一個公式,但如果您需要對兩個不同列中的集合中的唯一值進行計數,可能會有所幫助。使用原來的例子,我沒有:

ABC 123 
ABC 123 
ABC 123 
DEF 456 
DEF 567 
DEF 456 
DEF 456 

,並希望它顯示爲:

ABC 1 
DEF 2 

但更多的東西一樣:

ABC 123 
ABC 123 
ABC 123 
ABC 456 
DEF 123 
DEF 456 
DEF 567 
DEF 456 
DEF 456 

,並希望它出現:

ABC 
    123 3 
    456 1 
DEF 
    123 1 
    456 3 
    567 1 

我發現了最好的方式獲得我的數據到這個格式,然後可以進一步對其進行操作是使用以下命令:

enter image description here

一旦您選擇了這種情況,那麼選擇輔助數據集的標題(「在運行總計」它將是包含123,456和567的數據集的標題或列標題)。這將爲您提供主數據集內該項目中項目總數的最大值。

然後,我複製這些數據,將其粘貼爲值,然後將其放在另一個數據透視表中以更容易地操作它。我有大約25萬行的數據,所以這比一些公式方法效果好得多,尤其是那些試圖在兩列/數據集之間進行比較的公式,因爲它會使應用程序崩潰。

+0

我有一個完全不同的問題,但這個答案只是指出我在正確的方向。謝謝。 – jtolle 2013-12-12 22:40:27

+0

這個答案符合我的需要,因爲我有500,000行,我需要應用公式和我的電腦用盡內存,如果我想。謝謝! – cauldyclark 2016-03-21 00:00:57

3

對於以下公式,無需對錶格進行排序,以針對每個存在的唯一值返回1。

假設在問題提出的數據表的範圍爲A1:

=IF(COUNTIF($B$1:$B1,B1)>1,0,COUNTIF($B$1:$B1,B1)) 

複製該式對所有的行和最後一行將包含:B7在細胞C1輸入以下公式

=IF(COUNTIF($B$1:$B7,B7)>1,0,COUNTIF($B$1:$B7,B7)) 

這會導致第一次找到記錄時返回1,之後所有時間將返回0。

簡單的總結列在您的數據透視表

+2

如果你有一個大的數據集,使用'= IF(COUNTIF($ B $ 1:$ B1,B1),1,0)' - 這樣,countif只運行一次! – 2013-10-01 21:11:55

211

更新:您現在可以自動使用Excel 2013年做到這一點,我創造了這個作爲一個新的答案,因爲我以前的答案實際上解決了一個稍微不同的問題。

如果你有這個版本,然後選擇你的數據來創建一個數據透視表,並且當你創建你的表時,確保選項'添加這個數據到數據模型'複選框是檢查(見下文)。

Tick the box next to 'Add this data to the Data Model'

然後,你的數據透視表打開時,創建您的行,列和值正常。然後點擊您想要計算不同計數的字段並編輯字段值設置: Edit field value settings

最後,向下滾動到最後一個選項並選擇「Distinct Count」。' Choose the option 'Distinct Count'

這應該更新您的數據透視表值以顯示您正在查找的數據。

+21

這是比接受的更好的答案。 – 2014-03-14 16:44:58

+1

有沒有人知道這是否也適用於LibreOffice?似乎沒有類似的選擇,但它可能隱藏在某個地方? – Stockfisch 2014-05-05 14:59:45

+0

這幫了我很多。謝謝。任何人都知道,如果我在Excel 2010中打開一個帶有不同計數彙總的Excel文件,會發生什麼情況?數據透視表可能會搞砸了嗎? – Sawd 2015-07-27 19:35:49

0

我通常按字段排序數據,我需要做不同的計數,然後使用IF(A2 = A1,0,1);你會得到每個ID組的第一行中的1。簡單並且不需要任何時間在大型數據集上進行計算。

1

Excel 2013可以做計數不同的樞軸。如果沒有2013訪問權限,並且數據量較少,我會創建兩份原始數據,並在副本b中選擇兩列並刪除重複項。然後製作數據透視表並計算您的列數b。

2

我對這個問題的解決方法與我在這裏看到的有點不同,所以我會分享。

  1. (讓你的數據的副本第一)
  2. 串聯列
  3. 對所連接的列
  4. 最後刪除重複 - 在出現的設置支點

注:我想包括圖像,使這更容易理解,但不能因爲這是我的第一篇文章;)

1

您可以將COUNTIFS用於多個條件,

= 1/COUNTIFS(A:A,A2,B:B,B2)然後向下拖動。您可以在其中放置儘可能多的標準,但這往往需要大量時間來處理。

1

步驟1.在第一記錄添加列

步驟2.使用公式= IF(COUNTIF(C2:$C$2410,C2)>1,0,1)

步驟3.拖動它來的所有記錄

步驟4.通過公式過濾「1」列中的公式

3

我發現最簡單的方法是使用Value Field Settings下的Distinct Count選項(單擊Values窗格中的字段)。 Distinct Count的選項位於列表的最底部。

Location of where to click

這裏是前(TOP;正常Count)後(BOTTOM; Distinct Count

COUNT

DISTINCT COUNT

相關問題