web-dev-qa-db-ja.com

GoogleスプレッドシートのSUMIFS関数

[〜#〜] sumifs [〜#〜][〜#〜] sumif [〜#〜]ただし、Googleスプレッドシートに複数の基準があります。 MS-Excelには、この関数が組み込まれています( http://office.Microsoft.com/en-us/Excel-help/sumifs-function-HA010342933.aspx?CTT=1 )。

SUMIFと同様に、ArrayFormula( http://support.google.com/docs/bin/answer.py?hl=ja&answer=71291 )を使用しようとしました。

=ARRAYFORMULA(SUM(IF(A1:A10>5, A1:A10, 0)))

[〜#〜] and [〜#〜]を追加することにより:

=ARRAYFORMULA(SUM(IF(AND(A1:A10>5,B1:B10=1), C1:C10, 0)))

しかし[〜#〜] and [〜#〜]関数はをピックアップしませんでしたArrayFormula命令であり、常にFALSEを返しました。

私が見つけることができた唯一の解決策は、[〜#〜] query [〜#〜]を使用することでした。

=SUM(QUERY(A1:C10,"Select C where A>5 AND B=1"))

私の目標は、計算する多くの値でテーブル(ピボットテーブルに似ています)を埋めることです。

=SUM(QUERY(DataRange,Concatenate( "Select C where A=",$A2," AND B=",B$1)))

誰もがそれをより簡単かつ迅速に行うことができましたか?

19
Guy

「ピボットテーブル」を埋めるより高速な関数を見つけました。

=ARRAYFORMULA(SUM(((Sample!$A:$A)=$A2) * ((Sample!$B:$B)=B$1) * (Sample!$C:$C) ))

より重いStringおよびQuery関数がなければ、より高速に実行されるようです。

10
Guy

私の意見では、SumIFSのような関数を簡単に作成する最も簡単な方法は、FILTER関数とSUM関数を組み合わせることです。

SUM(FILTER(sourceArray, arrayCondition_1, arrayCondition_2, ..., arrayCondition_30))

例えば:

SUM(FILTER(A1:A10;A1:A10>5;B1:B10=1)

説明: FILTER()は、A1:A10> 5およびB1:B10 = 1のA1:A10の行をフィルターします。次に、SUM()はそれらのセルの値を合計します。

このアプローチは非常に柔軟で、たとえばCOUNTIFS()関数も簡単に作成できます(SUM()の代わりにCOUNT()を使用するだけです)。

15
Javaaaa

2013年12月の時点で、Googleスプレッドシートには、 このブログ投稿 および文書化された here で説明されているように、SUMIFS機能があります。

古いスプレッドシートは新しいバージョンに変換されないことに注意してください。ただし、データをコピーして新しいブックに貼り付けることもできます。

7
yoyo

この男は、フィルター関数を使用して、基準によって配列を切り詰め、次に合計関数を使用して同じセルにすべてを追加しました。 http://www.youtube.com/watch?v=Q4j3uSqet14 それは私にとって魅力的でした。

1
Graham