138

これは、学ぶのに簡単なピボットテーブルのようです。グループ化する特定の値について、一意の値をカウントしたいと思います。

たとえば、私はこれを持っています:

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

私が欲しいのは、これを示すピボットテーブルです。

ABC   1
DEF   2

私が作成する単純なピボットテーブルは、これ(行数のカウント)を提供します。

ABC   3
DEF   4  

しかし、代わりに一意の値の数が必要です。

私が実際にやろうとしているのは、最初の列のどの値がすべての行の2番目の列で同じ値を持っていないかを調べることです。つまり、「ABC」は「良い」、「DEF」は「悪い」です。

もっと簡単な方法があると思いますが、ピボットテーブルを試してみようと思いました...

4

16 に答える 16

252

更新:これはExcel 2013で自動的に実行できるようになりました。以前の回答では実際には少し異なる問題が解決されたため、これを新しい回答として作成しました。

そのバージョンを使用している場合は、データを選択してピボットテーブルを作成し、テーブルを作成するときに、[このデータをデータモデルに追加する]チェックボックスがオンになっていることを確認します(以下を参照)。

[このデータをデータモデルに追加する]の横のボックスにチェックマークを付けます

次に、ピボットテーブルが開いたら、通常どおり行、列、値を作成します。次に、個別のカウントを計算するフィールドをクリックして、フィールド値の設定を編集します。 フィールド値設定の編集

最後に、最後のオプションまで下にスクロールして、[個別カウント]を選択します。 オプション「個別カウント」を選択します

これにより、ピボットテーブルの値が更新され、探しているデータが表示されます。

于 2014-02-04T12:21:45.117 に答える
110

3番目の列を挿入し、セルにC2この数式を貼り付けます

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

コピーしてください。次に、1列目と3列目に基づいてピボットを作成します。スナップショットを見る

ここに画像の説明を入力してください

于 2012-08-09T03:18:52.793 に答える
10

数式を必要としない追加のオプションをミックスに投入したいのですが、2つの異なる列にまたがるセット内の一意の値をカウントする必要がある場合に役立つ可能性があります。元の例を使用して、私は持っていませんでした:

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

データをこの形式に変換してさらに操作できるようにするための最良の方法は、次を使用することでした。

ここに画像の説明を入力してください

[現在の合計]を選択したら、セカンダリデータセットのヘッダーを選択します(この場合、123、456、および567を含むデータセットのヘッダーまたは列のタイトルになります)。これにより、プライマリデータセット内のそのセット内のアイテムの総数の最大値が得られます。

次に、このデータをコピーして値として貼り付け、別のピボットテーブルに配置して、より簡単に操作できるようにしました。

参考までに、私は約25万行のデータを持っていたので、これはいくつかの数式アプローチ、特にアプリケーションをクラッシュさせ続けたために2つの列/データセット間で比較しようとするアプローチよりもはるかにうまく機能しました。

于 2013-08-02T11:51:11.507 に答える
6

最も簡単な方法は、Distinct Count下のオプションを使用することですValue Field Settings(ペインのフィールドをクリックしますValues)。のオプションDistinct Countはリストの一番下にあります。

クリックする場所の場所

これが前(TOP;通常Count)と後(BOTTOM; Distinct Count)です。

カウント

異なるカウント

于 2017-07-06T00:46:29.900 に答える
4

デブラ・ダルグレイスのユニークアイテム数 を見る

ここに画像の説明を入力してください

于 2012-08-09T03:21:21.987 に答える
3

次の数式でテーブルを並べ替えて、存在する一意の値ごとに1を返す必要はありません。

質問で提示されたデータのテーブル範囲がA1:B7であると仮定して、セルC1に次の数式を入力します。

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

その数式をすべての行にコピーすると、最後の行には次のものが含まれます。

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

これにより、レコードが最初に見つかったときに1が返され、その後は常に0が返されます。

ピボットテーブルの列を合計するだけです

于 2013-10-01T20:52:31.707 に答える
2

この問題に対する私のアプローチは、ここで見たものとは少し異なっていたので、共有します。

  1. (最初にデータのコピーを作成します)
  2. 列を連結します
  3. 連結された列の重複を削除します
  4. 最後-結果のセットをピボットします

注:これをさらに理解しやすくするために画像を含めたいのですが、これが私の最初の投稿であるため、できません;)

于 2014-10-23T18:17:48.820 に答える
1

シッダールスの答えは素晴らしいです。

ただし、この手法は、大量のデータセットを処理するときに問題が発生する可能性があります(私のコンピューターは50,000行でフリーズしました)。プロセッサをあまり使用しない方法:

単一の一意性チェック

  1. 2つの列(この例ではA、B)で並べ替えます
  2. より少ないデータを参照する式を使用する

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

複数の一意性チェック

異なる列の一意性を確認する必要がある場合、2つの種類に依存することはできません。

その代わり、

  1. 単一の列を並べ替える(A)
  2. 各グループのレコードの最大数をカバーする式を追加します。ABCに50行ある場合、数式は次のようになります。

    =IF(SUMPRODUCT(($A2:$A49=A2)*($B2:$B49=B2))>1,0,1)
    
于 2013-02-08T21:55:36.777 に答える
1

Excel 2013は、ピボットで個別にカウントを実行できます。2013にアクセスできず、データ量が少ない場合は、生データのコピーを2つ作成し、コピーbで両方の列を選択して、重複を削除します。次に、ピボットを作成し、列を数えますb。

于 2014-10-14T20:39:11.593 に答える
1

複数の基準にCOUNTIFSを使用できます。

= 1 / COUNTIFS(A:A、A2、B:B、B2)次に、下にドラッグします。そこにはいくつでも基準を入れることができますが、処理に時間がかかる傾向があります。

于 2015-07-09T19:01:24.413 に答える
1

手順1.列を追加する

ステップ2.IF(COUNTIF(C2:$C$2410,C2)>1,0,1)最初のレコードで式=を使用します

ステップ3.それをすべてのレコードにドラッグします

手順4.数式を使用して列の「1」をフィルタリングします

于 2015-09-09T12:36:26.360 に答える
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)ようにします。

ヘッダーセルがある場合は、これらをすべて1行下に移動すると、C3数式はになります=IF(COUNTIF($A$2:$A2,$A3)*COUNTIF($B$2:$B2,$B3)>0,0,1)

于 2012-08-09T03:20:07.073 に答える
0

データを並べ替えている場合は、次の式を使用することをお勧めします

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

計算に使用するセルが少ないため、これは高速です。

于 2013-05-27T06:58:02.557 に答える
0

私は通常、明確なカウントを行う必要があるフィールドでデータを並べ替えてから、IF(A2 = A1,0,1);を使用します。次に、IDの各グループの一番上の行に1が表示されます。シンプルで、大きなデータセットで計算するのに時間がかかりません。

于 2014-06-05T11:12:43.137 に答える
0

ヘルパー列にも使用できますVLOOKUP。私はテストしましたが、より少し速く見えますCOUNTIF

ヘッダーを使用していて、データがセルA2で開始している場合は、行の任意のセルでこの数式を使用して、同じ列の他のすべてのセルにコピーします。

=IFERROR(IF(VLOOKUP(A2;$A$1:A1;1;0)=A2;0;1);1)
于 2018-10-03T07:40:20.100 に答える
-3

私はこれを行う簡単な方法を見つけました。Siddarth Routの例を参照して、列Aの一意の値をカウントする場合:

  • 新しい列Cを追加し、C2に式 "= 1 / COUNTIF($ A:$ A、A2)"を入力します。
  • 数式を列の残りの部分にドラッグします
  • 列Aを行ラベルとしてピボットし、値のSum {列C)を使用して、列Aの一意の値の数を取得します
于 2013-01-08T17:06:46.583 に答える