- ベストアンサー
Excelでオートフィルタ後の直近Nの合計
- Excelでオートフィルタされたあとの、直近のデータNコの合計を右列(図でD列)に出したいです。
- 毎日出力されたデータ(C列)が届き、そのデータはカテゴリ(B列)が決まっています。ここではAかBとします。カテゴリは毎日ユニークに分類するので、AかBのどちらか(同じ日にAとBの混在はない)。やりたいことは、ExcelのD列に、最新の日のカテゴリがAだった場合、直近NコのAのデータの合計を、最新の日のカテゴリがBだった場合、直近NコのBのデータの合計を表示したいです。
- NはG1に変数として入力し、1~9の整数のみが入力可能です。B列に現れるカテゴリは、同じものは通常30日以内に最大9回は必ず現れます。D列のセルにはどのような計算式を入れればよいか、Excelは2000または2002です。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
回答No1です。Nが3の場合に式を示してしまいました。 作業列はNo1のままで、D2セルには次の式を入力して下方にオートフィルドラッグしてください。 =IF(OR(B2="",COUNTIF(B$2:B2,B2)<G$1),"",SUMIF((INDEX(B:B,MATCH(B2&COUNTIF(B$2:B2,B2)-G$1+1,F:F,0)):INDEX(B:B,ROW())),B2,INDEX(C:C,MATCH(B2&COUNTIF(B$2:B2,B2)-G$1+1,F:F,0)):INDEX(C:C,ROW())))
その他の回答 (6)
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
I2: =ROW() J2: =COUNTIF($B$2:$B2,B2) D2: =SUMPRODUCT((OFFSET(B2,,,SUMPRODUCT(MAX(($B$2:B2=B2)*(J$2:J2=J2-G$1+1)*ROW(A$2:A2)))-I2-1,)=B2)*OFFSET(C2,,,SUMPRODUCT(MAX(($B$2:B2=B2)*(J$2:J2=J2-G$1+1)*ROW(A$2:A2)))-I2-1,)) ただし、セル D2 には次の[条件付き書式]を設定して、この書式を下方にもコピーしています。 条件1 数式が =ISERROR(D2) フォント色 白 条件2 セルの値が 次の値に等しい 0 フォント色 白
お礼
条件付き書式を使う方法は考えつきませんでした。
- tom04
- ベストアンサー率49% (2537/5117)
No.3です! 前回は質問の意味を取り違えていた感じですね! オートフィルタした後に質問にあるような表示にしたい訳ですよね? もう一度画像をアップしておきます。 今回は作業列は使っていません。 ↓の画像のD2セルに =IF(COUNTIF($B$2:B2,B2)<$G$1,"",SUMIF(INDIRECT("B"&LARGE(IF($B$2:B2=B2,ROW($A$2:A2)),$G$1)):B2,B2,INDIRECT("C"&LARGE(IF($B$2:B2=B2,ROW($A$2:A2)),$G$1)))) ※ これは配列数式になってしまいますので、この画面からD2セルに貼り付ける場合は D2セルに貼り付け後、数式バー内で一度クリック! 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 D2セルをオートフィルで下へコピーすると画像のような感じになります。 こんな感じではどうでしょうか?m(_ _)m
お礼
この計算式はシンプルです。 オートフィルタは、見るとき見やすくするためでしたので、計算のために機能の利用の有無はとくに問いませんでした。
- kagakusuki
- ベストアンサー率51% (2610/5101)
作業列不要の方法です。 D2セルに次の関数を入力してから、D2セルをコピーして、D3以下に貼り付けて下さい。 =IF(OR(COUNTIF($B$1:INDEX($B:$B,ROW()),INDEX($B:$B,ROW()))<$G$1,ISERROR(1/($G$1=ABS(INT($G$1)))+1/$G$1)),"",SUMPRODUCT((INDEX($C:$C,ROW($C$1)+1):INDEX($C:$C,ROW()))*(INDEX($B:$B,ROW($B$1)+1):INDEX($B:$B,ROW())=INDEX($B:$B,ROW()))*(COUNTIF(OFFSET(INDEX($B:$B,ROW()),ROW(INDEX($B:$B,ROW($B$1)+1):INDEX($B:$B,ROW()))-ROW(),,ROW()-ROW(INDEX($B:$B,ROW($B$1)+1):INDEX($B:$B,ROW()))+1),INDEX($B:$B,ROW()))<=$G$1)))
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 一例です。 ↓の画像のように検索カテゴリ・直近個数を入力するセルを設けています。 E列を作業列として、E2セルに =IF(OR($G$1="",B2<>$G$1),"",ROW()) という数式を入れオートフィルでずぃ~~~!っと下へコピーしておきます。 そしてD2セルに =IF(OR(COUNT($E$2:E2)<$G$2,B2<>$G$1),"",SUMIF(INDIRECT("B"&LARGE($E$2:E2,$G$2)):B2,$G$1,INDIRECT("C"&LARGE($E$2:E2,$G$2)):C2)) という数式を入れオートフィルで下へコピーすると画像のような感じになります。 他に良い方法があればごめんなさいね。m(_ _)m
- KURUMITO
- ベストアンサー率42% (1835/4283)
作業列としてF2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B2="","",B2&COUNTIF(B$2:B2,B2)) D2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR(B2="",COUNTIF(B$2:B2,B2)<G$1),"",SUMIF((INDEX(B:B,MATCH(B2&COUNTIF(B$2:B2,B2)-2,F:F,0)):INDEX(B:B,ROW())),B2,INDEX(C:C,MATCH(B2&COUNTIF(B$2:B2,B2)-2,F:F,0)):INDEX(C:C,ROW())))
お礼
実は元データが数千におよぶので、入れ込みに苦労していましたが、作業列があることで、検証しながらできました。ありがとうございました。