• ベストアンサー

エクセル2003 期間内に当てはまる日付の個数

いつも回答して頂き、ありがとうございます。 D11セル~H11セルまでに入力された日付の内、D6セルの日付からE6セルの日付の一日前までに当てはまる日付けの個数を集計しようと思い、=SUMPRODUCT(D11:H11>=(D6))*(D11:H11<(E6))と記述しましたが、結果0個でした。 ネット等のサンプルを見ながら記述したのですが思うようにいきません。何処をどう直したらうまくいくのでしょうか?宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.3

>何処をどう直したらうまくいくのでしょうか? 数式に誤りがあります。 =SUMPRODUCT(D11:H11>=(D6))*(D11:H11<(E6)) SUMPRODUCTの引数が D11:H11>=(D6) のみでは目的の拾い出しができません。 また論理式の (D11:H11<(E6)) は使い方は正しくないように思います。 括弧の位置を変えることで正しい結果が得られます。 =SUMPRODUCT((D11:H11>=D6)*(D11:H11<E6)) もう1つの考え方としてSUMPRODUCT関数の引数を複数の配列にすれば個々の引数が目的通りか否かをチェックできます。 =SUMPRODUCT((D11:H11>=D6)*1,(D11:H11<E6)*1) 添付画像は後者の結果を示しています。 尚、11行の日付は年数を表示していませんが2012年です。

kero1192kero
質問者

お礼

括弧の記述のしかたが悪かったんですね。あと、式の基本が分かっていない。恥ずかしいかぎりです。ありがとうございました。

その他の回答 (4)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.5

回答No.3の補足です。 結果として「期間内に当てはまる日付の個数」が求められる関数は他にCOUNTIFSがあります。 =COUNTIFS(D11:H11,">="&D6,D11:H11,"<"&E6) 複数条件をANDで括ったようなものですから COUNTIF*COUNTIF と言う条件が成り立ちます。 論理を考えるにはCOUNTIFS関数の方が分かり易いと思います。 SUMPRODUCT関数は規模の大きなマトリクスの条件マッチを集計するときに便利ですが論理を誤るとバグを探し難くなります。

kero1192kero
質問者

お礼

エクセル2003なのでCOUNTIFSは使えません・・・。Bunjii様色々御提案頂きありがとうございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 質問者様が御質問文に記しておられる =SUMPRODUCT(D11:H11>=(D6))*(D11:H11<(E6)) という関数が間違っているというのは、回答No.3様の仰る通りなのですが、実際に =SUMPRODUCT(D11:H11>=(D6))*(D11:H11<(E6)) という関数にした場合には、「#VALUE!」エラーになってしまい、0になる事などあり得ませんので、実際には0が表示されている以上は、御質問文に記されている関数が誤っているのは、単に質問者様が御質問文を入力された際に、括弧の数を間違えて文章を入力してしまわれただけであり、ExcelのD7セルに実際に入力されている関数は、回答No.3様が挙げておられるものと同じ =SUMPRODUCT((D11:H11>=D6)*(D11:H11<E6)) という関数になっているものと思われます。  ですから、0になった理由は、回答No.1で挙げさせて頂いた理由によるものと思われます。  尚、回答No.2様が挙げておられる =SUMPRODUCT((D6:H6>=D11)*(D6:H6<E11)) という関数は、 「D11セル~H11セルまでに入力された日付の内、D6セルの日付からE6セルの日付の一日前までに当てはまる日付けの個数を求める関数」 という質問者様が御希望しておられる関数ではなく、 「D6セル~H6セルまでに入力された日付の内、D11セルの日付からE11セルの日付の一日前までに当てはまる日付けの個数を求める関数」です。

kero1192kero
質問者

お礼

自分は式の基本がまだまだ分かっていないようです。今回の事参考にさせて頂きます。色々説明して頂きありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! SUMPRODUCT関数の数式自体が間違いのようです。 >D11セル~H11セルまでに入力された日付の内、D6セルの日付からE6セルの日付の一日前まで・・・ であれば =SUMPRODUCT((D6:H6>=D11)*(D6:H6<E11)) という数式にします。 尚、D11・E11セルの日付は 今年のシリアル値になっていると思われますので、 当然結果は「0」となります。 D11およびE11セルを選択 → 数式バー内を確認してみてください。 2013/1/2 とか 2013/1/15 のようになっているはずです。m(_ _)m

kero1192kero
質問者

お礼

すみません。こちらの質問のしかたが悪かったようです。No.3の式でOKでした。ありがとうございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 SUMPRODUCT関数などまで持ち出す必要は御座いません。  考え方としては、「E6セルの日付よりも前の日付」の個数から、「D6セルの日付よりも前の日付」の個数を差し引けば良い訳です。  ですから次の様な関数となります。 =COUNTIF($D$11:$H$11,"<"&E$6)-COUNTIF($D$11:$H$11,"<"&D$6)  これを更に工夫して、セルに2012/1/1 PM5:30:28等の様な日付と時刻の両方を含んでいるデータが入力されている場合にも対応し、尚且つ、日付を入力すべきセルが空欄となっていたり、文字列データが入力されていたりした場合でも、誤った値が表示されたり、エラーとなったりしない様にしますと、次の様な関数となります。 =IF(ISNUMBER(1/(YEAR(D$6)>1904)/(YEAR(E$6)>1904)),COUNTIF($D$11:$H$11,"<"&INT(E$6))-COUNTIF($D$11:$H$11,"<"&INT(D$6)),"") >結果0個でした。  それは、質問者様がD11セルとE11セルに入力された日付が、どちらも"2013年"の1月の日付であるのに対し、D6セルに入力されている日付が"2012年"の1月1日で、E6セルセルに入力されている日付が"2012年"の1月11日なのですから、D11セルとE11セルに入力されている日付はどちらもカウントの対象期間外の日付となりますので当然の事です。(年が違います)  おそらくは、単純に「1月1日」と「1月11日」と入力されたのでしょうが、それでは日付を打ち込んだ年の日付(即ち今年の日付)となってしまいますので、横着なさらずに 2012/1/1 の様に、年のデータの所から入力される事を御勧め致します。

kero1192kero
質問者

お礼

今回も横着した日付を入力していたので、これか!と思ったのですが違っていました。あと、countifなんて思いもつきませんでした。期間というものにこだわりすぎてたようです。ありがとうございました。

関連するQ&A