• 締切済み

エクセル SUMPRODUCT関数について教えてください

エクセルで作成した表から ○○かつ●●のデータ個数を求めたく、 SUMPRODUCT関数を こちらで調べておりましたが どうしても解決しない部分があります。 どうぞ よろしくお願いいたします。 下記8桁数字は、日付です。 カウントしたい数は、B列(終了)が、A1セルに入力された年月かつ、区分(C列)が「A」の数です。 =SUMPRODUCT((LEFT(B2:B100,6)=A1)*(C2:C100="A")) こちらで、『B列=A1セル かつ C列="A"』のみのカウントは出来たのですが、 終了延長(D列)が空欄でない場合は、D列日付データの方をカウントする。 早期終了(E列)が空欄でない場合は、D列・B列よりも E列を優先し、カウントする。という条件を付けたいのですが、 Sheet1 A1セルに「200810(数を調べたい年月を入力)」 (開始)  (終了)     (区分)  (終了延長)  (早期終了)  A列     B列      C列     D列      E列 20061001   20081001   A    -        - 20070926   20081020   A    -        - 20071102   20081009   A    20081201    - 20080101   20081013   B    -        - 20080208   20081010   A    -        20080210 ・・・ この場合、「2」となるようにです。 IF、OR関数あたりかな と考えておりますが、SUMPRODUCT関数のどの部分で条件付ければ良いか解りません。 説明下手で大変申し訳ございませんが、ご助力いただければ幸いです。 

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 配列数式なら、以下のようにすればよいです。 =SUMPRODUCT((LEFT(B2:B100,6)=TEXT(A1,"000000"))*(C2:C100="A")*(D2:D100&E2:E100<>"")) ----------------------------- データベース関数のDCOUNT なら、以下のようにします。 このように、タイトル行を置き  A    B     C     D     E 開始   終了   区分   延長   早期終了 2行目にCriteria にこのようなスタイルを取り =AND(LEFT(B2,6)=$H$1,C2="A",OR(D2<>"",E2<>"")) H1 に以下を置き (' シングルクォーテーション)または、数式の中を文字列にする。 '200810 =DCOUNT(A1:E100,B1,Criteria) とすれば、同じように出ます。

hiposi
質問者

お礼

ご回答、アドバイスありがとうございます! お教えいただきました式、 =SUMPRODUCT((LEFT(B2:B100,6)=TEXT(A1,"000000"))*(C2:C100="A")*(D2:D100&E2:E100<>"")) を使用して イメージしていた感じに出来ました。 A1とA列の左6桁が同じ かつ C列が"A" かつ D,Eどちらも空欄のセルの行数 + A1とD列の左6桁が同じ かつ C列が"A" かつ Eが空欄のセル数の行数 + A1とE列の左6桁が同じ かつ C列が"A" かつ Dが空欄のセル数の行数 + A1とE列の左6桁が同じ かつ C列が"A" かつ D,Eどちらも空欄ではないセル数の行数 =SUM(SUMPRODUCT((LEFT(B3:B100,6)=TEXT(A1,"000000"))*(C3:C100="A")*(D3:D100&E3:E100="")),SUMPRODUCT((LEFT(D3:D100,6)=TEXT(A1,"000000"))*(C3:C100="A")*(E3:E100="")),SUMPRODUCT((LEFT(E3:E100,6)=TEXT(A1,"000000"))*(C3:C100="A")*(D3:D100="")),SUMPRODUCT((LEFT(E3:E100,6)=TEXT(A1,"000000"))*(C3:C100="A")*(D3:D100<>""))) というような感じにしてみました。 かなり 長々で、他に良い方法があるかもしれませんが・・・ エクセル初心者なので、色々勉強をして より良い方法を考えてみたいと思います。 アドバイス ありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

F列を使い、 =IF(E2<>"",E2,IF(D2<>"",D2,B2)) として下まで式をコピーします。 そして =SUMPRODUCT((LEFT(F2:F100,6)=TEXT(A1,"@"))*(C2:C100="A")) ではどうでしょう。 A1が文字列なら =SUMPRODUCT((LEFT(F2:F100,6)=A1)*(C2:C100="A")) でもいいですが。

hiposi
質問者

お礼

ご回答、アドバイスありがとうございます! 私の質問が言葉足らずですみません。 実は、Sheet1のデータベース部分は 毎回他データから列ごとそのまま貼り付けをしている為 データの横部分に関数等を使用出来ないのです・・・ お教えいただいたご回答は 他の機会に使用してみようと思います。 実は、SUMPRODUCT関数を これは自分のやりたい事に使えそうだ! と 昨日初めて知ったところでした。 色々 勉強になりました。ありがとうございました!

関連するQ&A