web-dev-qa-db-ja.com

条件付きの一意の値を数える

列Aには、さまざまな名前のリストがあります。列Bには、0または1の値があります。

列Aから列Bに1を持つすべての一意の名前のカウントを取得したい

以下の配列式を使用すると、一意の名前をカウントできますが、列Bに条件を適用できません。

=SUM(1/COUNTIF(A:A,A:A))
22
Tejas

B2:B100の同じ行に1があるA2:A100のdifferentの名前をカウントするために、この「配列式」を100行以下と仮定します。

=SUM(IF(FREQUENCY(IF(B2:B100=1,IF(A2:A100<>"",MATCH(A2:A100,A2:A100,0))),ROW(A2:A100)-ROW(A2)+1),1))

CTRL+SHIFT+ENTERで確認済み

2つは同じではないので、ユニークではなく異なると言うことに注意してください

10
barry houdini

このような?

=SUM(--(FREQUENCY(IF(($B$1:$B$8=1), COUNTIF($A$1:$A$8, "<"&$A$1:$A$8), ""), COUNTIF($A$1:$A$8, "<"&$A$1:$A$8))>0)))

これは配列数式です。を押す必要があります CTL + SHIFT + ENTER

スクリーンショット

enter image description here

7
Siddharth Rout

この一般的な問題の比較的簡単な解決策は

= SUM((B:B = 1)/ COUNTIFS(A:A、A:A、B:B、B:B))

配列数式として入力されます。

配列のサイズを実際にデータがある場所に制限する必要があります。

3
Dominik

数式である必要がありますか?これを行う簡単な方法は、列AおよびBからピボットテーブルを作成することです。次に、列Bをフィルターフィールドとして、Aのカウントを値として設定します(列AおよびBにラベルを付ける必要があります)。次に、ピボットシートのA4(少なくとも既定では)に回答を含める必要があります。これはあらゆるサイズのリストで機能し、複数の条件がある場合に実際に機能します。

数式である必要がある場合、完全に数式である必要がありますか?数式が機能する前にAによる並べ替えが許可されている場合、このワークフローはどうでしょうか。私はこれに夢中ではなく、改善できると思います。

1)A(昇順または降順)でソートし、次にB(降順)でソートする

2)Cでは、Cの各行に次のような式を入力します。

=if (and(A2<>A1,B2=1),1,0) 

C1は次のようになります。

=b1 

C2からデータの最後の行(c500など)までドラッグします。

3)次に、C、= sum(c1:c500)を合計してカウントします。

(必要な最大数がわかっている限り)数式をデータの行の下にドラッグできます。すべての空白行に対して0を返す必要があります。その後、AとBにデータを追加すると、残りは自動的に更新されます。データを再分類する必要がある可能性があります。

ピボットテーブルソリューションの利点の1つは、既存のデータの行内に新しいデータを挿入する限り、データセットとともに自動的に成長できることです。もちろんソートは必要ありません。

3
BKay

ピボットテーブルで簡単......:

SO15944249 example

1
pnuts