COUNTIF関数で2つの異なる列を参照するにはどうすればよいですか?


11

説明するために全力を尽くします。次のようなシートがあるとしましょう(この不自然な例では、マーケティングメールをさまざまな人に送信していて、年齢と郵便番号を知っていて、それらのメールのクリック率を追跡したいとします)。

        A   |    B        |    C  
  1     Age |    zip code |  click?  
  2     26  |    11111    |  true  
  3     27  |    11112    |  true  
  4     28  |    11111    |  false  
  5     27  |    22222    |  false  
  6     28  |    11112    |  false  
  7     26  |    22222    |  true  

今、私は様々な統計を追跡したいと思います。この場合、年齢別および郵便番号別にクリック率を追跡したいと思います。だから私はこのようなテーブルを持っています:

      E         F          G 
 1   Age  |  # sent  | # clicked
 2   26   |
 3   26   |
 4   27   |
 5   28   |

したがって、基本的には「#sent」列に、(たとえばF2に)次のように配置できます。

=COUNTIF(A:A, E2)

列Aに「26」が2回出現したため、セルF2は2になります。

しかし、何がクリックされたかを知りたい場合はどうでしょうか?私は次のようなことを言いたいです:

=COUNTIF(A:A == E2  AND  C:C == True, for the same row where A:A matched E2)

私は次のような式で別の列Dを追加できることを知っています

=IF(C2, A2, "")

列Cがtrueの場合、列Dの年齢のみが表示されます。しかし、私は潜在的に多くの基準を持つことができ、私が持っている基準列ごとに別の「偽の」列を追加する必要があるようには思えません。

これを行う方法はありますか?Googleドキュメントではなく、Excelでは?


注:新しい Googleスプレッドシートの答えはそこにあります。

回答:


11

ARRAYFORMULA、SUM、および算術演算の組み合わせを使用する

26歳までのすべてのクリックをカウントする関数は次のとおりです。

=ARRAYFORMULA(sum((A:A=26) * (C:C="true")))

この操作には3つの部分があります。

  • ARRAYFORMULAは、指定した範囲をループの世話をします
  • SUMは、真の結果のすべてを数え管理します

基本的に、trueは1に変換され、falseは0に変換されます。ブール論理は算術演算を使用して行われます。

アンAND演算は乗算を使用しています。

  • (1 * 1)= 1-(True && True)= True
  • (1 * 0)= 0-(真&&偽)=偽
  • (0 * 0)= 0-(False && False)= False

アンOR演算は*の組み合わせ使用SIGNの機能と追加を:

  • sign(1 + 1)= 1-(True || True)= True
  • sign(1 + 0)= 1-(True || False)= True
  • sign(0 + 0)= 0-(False || False)= False

注:ブール加算と算術加算の動作が異なるため、符号関数が必要です。基本的にブール加算1 + 1 = 1、算術加算1 + 1 = 2です。明らかに、算術加算はカウントをめちゃくちゃにするので、加算関数の結果を符号関数で実行する必要があります。符号関数は、値が正の場合は1、値が0の場合は0、負の場合は-1を返します。

20歳から25歳までのすべてのユーザーのクリック数をカウントしたいとします。

=ARRAYFORMULA(sum(sign((A:A=20) + (A:A=21) + (A:A=22) + (A:A=23) + (A:A=24) + (A:A=25)) * (C:C="true")))

ここにサインは必要ありませんか?bothたとえば、単一のセルが20と23になることはないため、この場合、追加しても値が1を超えることはありません。SIGNは、条件が相互に排他的でない場合にのみ必要です。また、このバージョンでは、20から25の間を簡単に実行できませんか?=arrayformula(sum((A:A>=20)*(A:A<=25)*(C:C=TRUE)))
Barry houdini、2012年

ORロジックの一般的な使用法を説明しようとしました。テストが排他的でない(同じ列に含まれる)場合は、SIGN関数が必要になります。この場合はそうではありません。そして、はい、あなたの例はより良いアプローチですが、ORの使用を示していません。私は、OPの質問に適合するORの使用を実証するための単純化したアプローチを考えていましたが、カフからの例を思いつくのは明らかに得意ではありません。より良い例がある場合は、回答を編集または改善することをお勧めします。
Evan Plaice、2012年

謝罪、エヴァン、私は誤解しました-それは素晴らしい例です。
Barry houdini、2012年

= trueを回避できるため、= ARRAYFORMULA(sum((A:A = 26)* C:C))
tic

1
@tic私はブール値true(GoogleスプレッドシートではTRUE)を使用していませんでした。私は、opが彼の質問で使用した文字列の「true」を参照していました。試してみてください。C:Cの値をテストすると、空ではない文字列に対して常にTRUEが返されると確信しています。スプレッドシートのセルでは、GoogleはJavaScriptを介してExcelのルールに従います。リークの多い抽象化の楽しい世界へようこそ。
Evan Plaice、2012

10

現在、新しいGoogleスプレッドシートは、必要なジョブを直接処理できるCOUNTIFSをサポートしています。

=COUNTIFS(A:A, E2, C:C, "true")

すべての範囲と比較をリストして、コンマで区切ってください。


4
下にスクロールしてくれてありがとう。これは、新しいGoogleシートで作業するときの答えです。
Christiaan Westerbeek、2014

3

Excelでは、Excel 2003ではSUMPRODUCTを使用し、Excel 2007以降ではCOUNTIFS( "S"付き)を使用しますが、Googleドキュメントではこれを試してください

=arrayformula(sum((A:A=E2)*(C:C=TRUE)))


3
=COUNTA( IFERROR( FILTER('Guest List'!$G:$G ; 'Guest List'!$G:$G = "Yes" ; 'Guest List'!$L:$L = "USA" ) ) )

これは2つの列でした-私はこれを私の結婚式のゲストリストに使用しています-この場合、保存日付を送信するときに「はい」と場所を「USA」に集計しているので、後で送料を計算できます。より短い式があるかもしれませんが、これはうまくいくようですので、私はそれをいじっていません!

ハッピーカウント。


1

Excelでは、数式を忘れてピボットテーブルを使用します。

結果を取得するために合計する変数として繰り返し使用できる「カウンター」列を1つ追加する必要がある場合があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.