web-dev-qa-db-ja.com

複数のAND OR条件でSUMIFSを使用する

AND条件のセットに加えてOR条件のセットに基づいて列を合計する簡潔なExcel式を作成したいと思います。

Excelテーブルには次のデータが含まれており、列の定義名を使用しました。

  • Quote_Value(Worksheet!$ A:$ A)は会計値を保持します。
  • Days_To_Close(Worksheet!$ B:$ B)には、結果が数値になる数式が含まれています。
  • セールスマン(ワークシート!$ C:$ C)はテキストを含み、名前です。
  • Quote_Month(Worksheet!$ D:$ D)には、別の列の日付/時刻番号をテキストベースの月の参照に変換する式(= TEXT(Worksheet!$ E:$ E、 "mmm-yy"))が含まれています。

SalesmanがJBloggsに等しく、Days_To_Closeが90以下で、Quote_Monthが次のいずれか(10月13日、11月13日、または12月13日)に等しい場合、Quote_Valueを合計します。

現時点では、これを機能させることができましたが、多くの繰り返しが含まれており、必要ではないと思います。

=SUM(SUMIFS(Quote_Value,Salesman,"=JBloggs",Days_To_Close,"<=90",Quote_Month,"=Oct-13")+SUMIFS(Quote_Value,Salesman,"=JBloggs",Days_To_Close,"<=90",Quote_Month,"=Nov-13")+SUMIFS(Quote_Value,Salesman,"=JBloggs",Days_To_Close,"<=90",Quote_Month,"=Dec-13"))

私がやりたいのは次のようなものですが、正しい構文を見つけることができません:

=SUMIFS(Quote_Value,Salesman,"=JBloggs",Days_To_Close,"<=90",Quote_Month,OR(Quote_Month="Oct-13",Quote_Month="Nov-13",Quote_Month="Dec-13"))

この式はエラーではなく、値0を返すだけです。しかし、手動でデータを調べた場合、それは正しくありません。 TRIM(Quote_Month)を使用して、スペースがデータに入らないようにしましたが、拡張SUM式が機能するという事実は、データが正常であり、構文の問題であることを示しています。誰かが私を正しい方向に導くことができますか?

8
Dominic

このようにSUMIFSを使用できます

=SUM(SUMIFS(Quote_Value,Salesman,"JBloggs",Days_To_Close,"<=90",Quote_Month,{"Oct-13","Nov-13","Dec-13"}))

SUMIFS関数は3つの値の「配列」を返します(「Oct-13」、「Nov-13」、および「Dec-13」ごとに合計1つ)。したがって、SUMが必要です。その配列を合計し、最終結果を提供します。

この構文には注意してください。式内には、「OR」条件を使用して最大でtwo基準のみを指定できます。2つある場合は、1つにで基準を区切る必要がありますカンマ、他の場合はセミコロン

さらに必要な場合は、SUMPRODUCTとともにMATCHを使用できます。あなたの場合

=SUMPRODUCT(Quote_Value,(Salesman="JBloggs")*(Days_To_Close<=90)*ISNUMBER(MATCH(Quote_Month,{"Oct-13","Nov-13","Dec-13"},0)))

そのバージョンでは、ISNUMBER/MATCHを使用して「OR」条件をいくつでも追加できます

19
barry houdini

より柔軟なDSUMを使用できます。セールスマンまたは見積月の名前を変更する場合のように、数式を変更する必要はなく、一部の基準セルのみを変更する必要があります。詳細については、以下のリンクを参照してください...基準さえ他のシートからコピーする式にすることができます

http://office.Microsoft.com/en-us/Excel-help/dsum-function-HP010342460.aspx?CTT=1

2
mooneazy

Quote_Monthのソース列で実際の日付/時刻を参照することを検討できます。その後、ORをいくつかのANDsに変換できます。 Quote_Dateを呼び出すことにしました

=SUMIFS(Quote_Value,"<=90",Quote_Date,">="&DATE(2013,11,1),Quote_Date,"<="&DATE(2013,12,31),Salesman,"=JBloggs",Days_To_Close)

(興味深い条件を前面に移動しました)。

このアプローチは、「OR」条件が実際に日付範囲を指定しているため、ここで機能します-他の場合には機能しない可能性があります。

1
Mike Woodhouse

速度

SUMPRODUCTSUM配列よりも高速です。つまり、SUM関数に_{}_配列があります。 SUMIFSSUMPRODUCTより30%高速です。

{SUM(SUMIFS({}))} vs SUMPRODUCT(SUMIFS({}))はどちらも正常に機能しますが、SUMPRODUCTは_CTRL-SHIFT-ENTER_を使用せずに作成して、_{}_を作成する方が少し簡単だと感じています。

好み

個人的には、複数の条件に対してSUMPRODUCT(--(ISNUMBER(MATCH(...))))SUMPRODUCT(SUMIFS({}))よりも書くことを好みます。

ただし、特定の特性またはすべてを選択するドロップダウンメニューがある場合、SUMPRODUCT(SUMIFS())が唯一の方法です。 (「すべて」を選択する場合、値は「<>」+「特定の特性の一部でない限り、どのような単語でも入力する必要があります」。

1
Walter S

Quote_Month(Worksheet!$ D:$ D)には、別の列の日付/時刻番号をテキストベースの月の参照に変換する式(= TEXT(Worksheet!$ E:$ E、 "mmm-yy"))が含まれています。

ORに_+_を追加すると、Sumproductを使用できます。こちらをご覧ください

=SUMPRODUCT((Quote_Value)*(Salesman="JBloggs")*(Days_To_Close<=90)*((Quote_Month="Cond1")+(Quote_Month="Cond2")+(Quote_Month="Cond3")))

ScreenShot

enter image description here

1
Siddharth Rout

数式を機能させるには、カーソルを数式内に置き、ctr + shift + enterを押すと機能します!

0
user3685392

以下を使用すると、セルのアドレスを簡単にリンクできます...

=SUM(SUMIFS(FAGLL03!$I$4:$I$1048576,FAGLL03!$A$4:$A$1048576,">="&INDIRECT("A"&ROW()),FAGLL03!$A$4:$A$1048576,"<="&INDIRECT("B"&ROW()),FAGLL03!$Q$4:$Q$1048576,E$2))

完全なダイナミックでセルアドレスを使用するために必要なアドレス/置換/列関数を使用できます。

0
Ganesh