これは、学ぶのが簡単なピボットテーブルのようです。私がグループ化している特定の値について、一意の値を数えたいのですが。
たとえば、私はこれを持っています:
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"です。
もっと簡単な方法があると確信していますが、ピボットテーブルを試してみることを考えていました...
3列目を挿入し、セルC2
にこの数式を貼り付けます
=IF(SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))>1,0,1)
それをコピーします。 1列目と3列目に基づいてピボットを作成します。スナップショットを見る
更新:あなたは今Excel 2013でこれを自動的に行うことができます。私の前の答えは実際にはわずかに異なる問題を解決するので、私はこれを新しい答えとして作成しました。
そのバージョンがある場合は、データを選択してピボットテーブルを作成し、テーブルを作成するときは、[このデータをデータモデルに追加する]チェックボックスがオンになっていることを確認します(下記参照)。
その後、ピボットテーブルが開いたら、通常どおりに行、列、および値を作成します。次に、個別の数を計算し、フィールド値設定を編集したいフィールドをクリックします。
最後に、最後のオプションまでスクロールして、[Distinct Count]を選択します。
これでピボットテーブルの値が更新され、探しているデータが表示されます。
数式を必要としない追加のオプションをミックスに追加したいのですが、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
私は自分のデータをこの形式に変換し、さらにそれを操作できるようにするための最良の方法は次のようにすることでした。
[積算合計]を選択したら、2次データセットのヘッダーを選択します(この場合、123、456、および567を含むデータセットのヘッダーまたは列タイトルになります)。これにより、プライマリデータセット内の、そのセット内のアイテムの合計数の最大値がわかります。
次に、このデータをコピーして値として貼り付け、それを別のピボットテーブルに入れてさらに簡単に操作できるようにしました。
ちなみに、私は約四百万行のデータを持っていたので、これはいくつかの数式アプローチ、特にアプリケーションをクラッシュさせ続けたために2つのカラム/データセットを比較しようとするアプローチよりはるかにうまくいった。
「個別カウント」を実行する機能はExcel 2013の一部ですが、自動的には有効になりません。
したがって、Excel 2013のコピーを実行する場合は、関数を使用する手間をかけずにこれを解決するための優れた方法があります。 http://datapigtechnologies.com/blog/index.php/distinct-count-in-pivot- Excelの2013年の最終テーブル/
Debra Dalgleish's ユニークアイテム数を数える
次の式でテーブルをソートして、存在する一意の値ごとに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が返されます。
ピボットテーブルの列を単純に合計する
この問題への私のアプローチはここで見るものとは少し異なっていたので、私は共有するつもりです。
注: これをさらに理解しやすくするために画像を含めたいのですが、これが私の最初の投稿なので、傾けないでください。
Siddharthの答えは素晴らしいです。
しかし しかし、この手法は大量のデータを扱うときに問題を起こす可能性があります(私のコンピューターは50,000行を凍結しました)。プロセッサに負担をかけない方法
単一性検査
少ないデータを見る式を使う
=IF(SUMPRODUCT(($A2:$A3=A2)*($B2:$B3=B2))>1,0,1)
複数の一意性チェック
異なる列で一意性をチェックする必要がある場合は、2種類の方法に頼ることはできません。
代わりに、
各グループの最大レコード数をカバーする式を追加します。 ABCが50行ある場合、式は次のようになります。
=IF(SUMPRODUCT(($A2:$A49=A2)*($B2:$B49=B2))>1,0,1)
Excel 2013では、Countをピボットで区別することができます。 2013にアクセスできない、それが少量のデータの場合は、生データのコピーを2つ作成し、コピーbで両方の列を選択して重複を削除します。それからピボットを作り、あなたのコラムを数えます。
COUNTIFSは複数の基準に使用できます。
= 1/COUNTIFS(A:A、A2、B:B、B2)にドラッグします。そこにあなたが望む限り多くの基準を置くことができますが、それは処理するのに多くの時間がかかる傾向があります。
ステップ1. 列を追加
ステップ2 /最初のレコードに式= IF(COUNTIF(C2:$C$2410,C2)>1,0,1)
を使用する
ステップ3. すべてのレコードにドラッグする
ステップ4 式の列に '1'をフィルタする
VLOOKUP
もヘルパーカラムに使用できます。私はテストし、COUNTIF
より少し速く見えます。
ヘッダーを使用していて、データがセルA2
で始まっている場合は、行内の任意のセルでこの式を使用して、同じ列内の他のすべてのセルにコピーします。
=IFERROR(IF(VLOOKUP(A2;$A$1:A1;1;0)=A2;0;1);1)
私は通常データを区別するために必要なフィールドでソートしてからIFを使用します(A2 = A1,0,1)。その後、IDの各グループの一番上の行に1が入ります。単純で、大きなデータセットを計算するのに時間がかかりません。
データがソートされている場合は、次の式を使用することをお勧めします。
=IF(OR(A2<>A3,B2<>B3),1,0)
計算に使用するセルが少ないため、これは高速です。
一意性を格納するための追加の列を作成してから、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)
になります。