- 締切済み
エクセル数式(関数)で0<の数値の数を指定
日付|受注数量 が縦に並ぶデータベース形式の表があります。 過去n日間分の稼働日のみ(受注数量>0)の日当たり受注数量平均を出す為に =AVERAGEIF(今日の受注数量:OFFSET(今日の受注数量,-n,0),"<>0") でやると、休日(受注数量=0)の日を"含めた"n日間になってしまうので長期休み(nよりも休日期間が長い)が入ると結果が0になってしまいます。 =AVERAGEIF(今日の受注数量:OFFSET(今日の受注数量,-(n+COUNTIF(今日の受注数量:OFFSET(今日の受注数量,-n,0),0)),0),"<>0") でn日間の期間内の0をCOUNTしてその日数分期間を拡張してやる方法を考えましたが、これも拡張した先にまた休日(0)があれば同じことです。 やりたいのは、あくまでも"0"を超過しているデータを過去n日分ほしいです。 なにか関数で代用できるのか、いい数式があるのか、教えてください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- HohoPapa
- ベストアンサー率65% (455/693)
添付画像のような要領で >"0"を超過しているデータ これらのデータだけを別シートに集めるという対応はいかがでしょうか なお、 Sheet1のC2セルの計算式は =IF(B2<>0,INT(C1+1),C1+0.01) Sheet2のA1セルの計算式は =IFERROR(INDEX(Sheet1!A:A,MATCH(ROW(),Sheet1!C:C,0)),"") Sheet2のB1セルの計算式は =IFERROR(INDEX(Sheet1!B:B,MATCH(ROW(),Sheet1!C:C,0)),"") それぞれ、必要数、下方向に複写します。 もしVBAを使ってもいいのであれば 作業列も別シートへ集約する必要もなく 期待の計算(開始セルと日数を指定して平均を求めること)が可能です。 いかがでしょうか?
- bunjii
- ベストアンサー率43% (3589/8249)
>過去n日間分の稼働日のみ(受注数量>0)の日当たり受注数量平均を出す為に 提示の数式「=AVERAGEIF(今日の受注数量:OFFSET(今日の受注数量,-n,0),"<>0")」の考え方を根本から変えないと無理でしょう。 AVERAGEIFS関数を使って集計期間をWORKDAY.INTL関数で割り出します。 =AVERAGEIFS([計算範囲],[日付範囲],"<="&[今日の日付],[日付範囲],">="&WORKDAY.INTL([今日の日付],-[n日],[週休指定],[特定休日のリスト])) 具体的な数式が必要でしたら模擬データを提示してください。
- kkkkkm
- ベストアンサー率66% (1719/2589)
sumで範囲の合計を出してCountifで範囲の稼働日を出して割るというのとは違うのでしょうか。