• ベストアンサー

エクセル2003 期間内の集計

いつも回答して頂き、とても感謝しています。 期間内(D6セル~E6セルの一日前)の日付が、15行目の日付けに含まれていた場合、その日付の上(14行目)の語句をD9セルから下に表示させようと思っていますが、どんな関数を組み合わせればいいか分かりません。宜しくお願い致します。 ※期間がE6セル~F6セルの場合はE9セルから下に表示。

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

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

 回答No.2、3です。  15行目に入力されている日付の中に同じ日付が重複して入力されている場合であっても有効な方法です。 【方法その1】  作業行を用いる方法です。  今仮に、御質問欄の添付画像にある様な表が存在しているシートのシート名がSheet1であるものとして、Sheet2の1行目を作業行として使用するものとします。  まず、Sheet2のD1セルに次の関数を入力して下さい。 =IF(INDEX(Sheet1!$15:$15,COLUMN())="","",COUNTIF(Sheet1!$15:$15,"<"&INDEX(Sheet1!$15:$15,COLUMN()))+COUNTIF(INDEX(Sheet1!$15:$15,1):INDEX(Sheet1!$15:$15,COLUMN()),INDEX(Sheet1!$15:$15,COLUMN())))  次に、Sheet2のD1セルをコピーして、Sheet2の1行目におけるD列よりも右側にあるセル範囲に貼り付けて下さい。  次に、Sheet1のD9セルに次の関数を入力して下さい。 =IF(OR(NOT(ISNUMBER($D$7)),D$7<ROWS($9:9)),"",INDEX($14:$14,MATCH(COUNTIF($15:$15,"<"&D$6)+ROWS($9:9),Sheet2!$1:$1,0)))  次に、Sheet1のD9セルをコピーして、Sheet1のE9~AL9の範囲に貼り付けて下さい。  次に、Sheet1のD9~AL9の範囲をコピーして、同じ列の10行目以下に貼り付けて下さい。 【方法その2】  作業行を用いる事なく、関数のみで処理する方法です。  まず、D9セルに次の関数を入力して下さい。 =IF(OR(NOT(ISNUMBER($D$7)),D$7<ROWS($9:9)),"",INDEX($14:$14,SUMPRODUCT(ISNUMBER(COLUMN($D$15:INDEX($15:$15,MATCH(9E+99,$15:$15))))*(COUNTIF(OFFSET($D$15,,,1,COLUMN($D$15:INDEX($15:$15,MATCH(9E+99,$15:$15)))-COLUMN($D$15)+1),"<"&INT(E$6))-COUNTIF(OFFSET($D$15,,,1,COLUMN($D$15:INDEX($15:$15,MATCH(9E+99,$15:$15)))-COLUMN($D$15)+1),"<"&INT(D$6))<ROWS($9:9)))+COLUMN($D$15)))  次に、D9セルをコピーして、E9~AL9の範囲に貼り付けて下さい。  次に、D9~AL9の範囲をコピーして、同じ列の10行目以下に貼り付けて下さい。

kero1192kero
質問者

お礼

返事が遅れて申し訳ありませんでした。 さっそく貼り付けて確認してみた所、自分が思っていた通りに表示が出来ていたのでびっくりです。貴重な時間を費やして考えて下さり、ありがとうございました。

その他の回答 (4)

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

質問の内容でデータの情報が少ないので目的に合うか否かが分かりません。 関数のみでしょるするには作業用シートを使った方が分かり易いでしょう。 添付画像は1つの方法です。 ご提示の画像からデータ用のシート(Sheet名=Data)を作成しました。 方法はINDEX関数でセルの値を取り込むかセルのコピーで対処できます。 14行目以降は手入力で追加データも入力しました。 作業用シート(Sheet名=Work)はデータ用シートからテーブルを変換したものです。 作業用シートのD2セルに次の式を入力します。 =IF(COUNTIFS(Data!$D$15:$D$24,">="&D$1,Data!$D$15:$D$24,"<"&E$1)>0,ROW(),"") D2セルの式をE2セルから必要数を右にオートフィルでコピーします。 直後に下へ必要行数を列を纏めてオートフィルでコピーします。 データ用のシートのD9セルに次の式を入力します。 =IFERROR(INDEX(Work!$B$2:$B$13,SMALL(Work!D$2:D$13,ROW($A1))-1,1),"") D9セルをE9から右へ必要数コピーします。 直後に下へ必要数をコピーします。 結果は添付画像のようになります。

kero1192kero
質問者

お礼

返事が遅れて申し訳ありません。 COUNTIFSはエクセル2003で使えないようです。貴重な時間を費やして考えて下さりありがとうございました。

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

 回答No.2です。  先程の回答を投稿してから気づいたのですが、15行目に入力されている日付には、同じ日付が重複して入力されていて、尚且つ、15行目に入力されている日付は同じであっても、14行目に入力されている語句が異なってる場合もあり得るのでしょうか?  もしも、その様な日付の重複がある場合には、回答No.2の方法でも表示されない語句が出て来る場合がありますので、工夫が必要となります。  ですから、もし、15行目に入力されている日付の中に同じ日付が重複して入力されている事もあり得る場合には、補足欄等を使用して御知らせ願います。

kero1192kero
質問者

お礼

同じ日付が重複する場合もあります。説明が足りてなく申し訳ありません。No.4で提示してくれたもので完璧でした。

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

 今仮に、7行目に入力されている数値が、「15行目の中において、『期間内(D6セル~E6セルの一日前)の日付』が入力されているセルの個数」であるものとします。  まず、D9セルに次の関数を入力して下さい。 =IF(OR(NOT(ISNUMBER($D$7)),D$7<ROWS($9:9)),"",INDEX($14:$14,MATCH(SMALL($15:$15,COUNTIF($15:$15,"<"&D$6)+ROWS($9:9)),$15:$15,0)))  次に、D9セルをコピーして、E9~AM9の範囲に貼り付けて下さい。  次に、D9~AM9の範囲をコピーして、同じ列の10行目以下に貼り付けて下さい。  以上です。

kero1192kero
質問者

お礼

No.4の提示内容で完璧でした。

  • sora1515
  • ベストアンサー率58% (54/92)
回答No.1

簡単なIF関数になります・・・ =IF(AND(D$6-1<D$15,D$15<E$6),D$14,"") これをD9に置きオートフィル 15行目は日付書式が前提です。 もし文字列書式としたいのであれば別途日付にしなければ条件比較はできません。やり方がわからない場合は年をどうするか決めた上で再度ご質問下さい。

kero1192kero
質問者

お礼

返事が遅れてしまい申し訳ありませんでした。 例えばD列の15行目に入力した日付けが検索している日付の範囲内(D6~E6)に含まれている場合、上手く表示されますね。しかし、15行目の他の列に日付の範囲内(D6~E6)の日付が含まれている場合は表示されませんでした。No.4の提示された式で自分の思った内容になっています。貴重な時間を費やして考えて下さり、ありがとうございました。

関連するQ&A