web-dev-qa-db-ja.com

固有値をカウントするための単純なピボットテーブル

これは、学ぶのが簡単なピボットテーブルのようです。私がグループ化している特定の値について、一意の値を数えたいのですが。

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

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

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

ABC   1
DEF   2

私が作成した簡単なピボットテーブルはこれを私に与えているだけです(何行の数のカウント):

ABC   3
DEF   4  

しかし、代わりにユニークな値の数が欲しいのです。

私が本当にしようとしているのは、最初の列のどの値がすべての行に対して2番目の列の同じ値を持たないかを調べることです。つまり、 "ABC"は "good"、 "DEF"は "bad"です。

もっと簡単な方法があると確信していますが、ピボットテーブルを試してみることを考えていました...

129
user1586422

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

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

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

enter image description here

105
Siddharth Rout

更新:あなたは今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'

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

241

数式を必要としない追加のオプションをミックスに追加したいのですが、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

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

enter image description here

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

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

ちなみに、私は約四百万行のデータを持っていたので、これはいくつかの数式アプローチ、特にアプリケーションをクラッシュさせ続けたために2つのカラム/データセットを比較しようとするアプローチよりはるかにうまくいった。

9

「個別カウント」を実行する機能はExcel 2013の一部ですが、自動的には有効になりません。

したがって、Excel 2013のコピーを実行する場合は、関数を使用する手間をかけずにこれを解決するための優れた方法があります。 http://datapigtechnologies.com/blog/index.php/distinct-count-in-pivot- Excelの2013年の最終テーブル/

7
Greg

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

Location of where to click

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

COUNT

DISTINCT COUNT

5
Peter
4
brettdj

次の式でテーブルをソートして、存在する一意の値ごとに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が返されます。

ピボットテーブルの列を単純に合計する

3
Jeff Baumet

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

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

注: これをさらに理解しやすくするために画像を含めたいのですが、これが私の最初の投稿なので、傾けないでください。

2

Siddharthの答えは素晴らしいです。

しかし しかし、この手法は大量のデータを扱うときに問題を起こす可能性があります(私のコンピューターは50,000行を凍結しました)。プロセッサに負担をかけない方法

単一性検査

  1. 2列でソートする(この例ではA、B)
  2. 少ないデータを見る式を使う

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

複数の一意性チェック

異なる列で一意性をチェックする必要がある場合は、2種類の方法に頼ることはできません。

代わりに、

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

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

Excel 2013では、Countをピボットで区別することができます。 2013にアクセスできない、それが少量のデータの場合は、生データのコピーを2つ作成し、コピーbで両方の列を選択して重複を削除します。それからピボットを作り、あなたのコラムを数えます。

1
Zachary

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

= 1/COUNTIFS(A:A、A2、B:B、B2)にドラッグします。そこにあなたが望む限り多くの基準を置くことができますが、それは処理するのに多くの時間がかかる傾向があります。

1
user5100077

ステップ1. 列を追加

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

ステップ3. すべてのレコードにドラッグする

ステップ4 式の列に '1'をフィルタする

1
Abhishek Verma

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

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

=IFERROR(IF(VLOOKUP(A2;$A$1:A1;1;0)=A2;0;1);1)
0
Marossik

私は通常データを区別するために必要なフィールドでソートしてからIFを使用します(A2 = A1,0,1)。その後、IDの各グループの一番上の行に1が入ります。単純で、大きなデータセットを計算するのに時間がかかりません。

0

データがソートされている場合は、次の式を使用することをお勧めします。

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

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

0
SumitB

一意性を格納するための追加の列を作成してから、sum that upをピボットテーブルに追加できます。

つまり、セル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)になります。

0
lc.