• 締切済み

0を省いた 曜日別平均

エクセルで売上管理表の作成途中なんですが、曜日別の売上&売上平均のところで困ってます。曜日別平均=SUMIF(C2:C315,"月",D2:D315)/COUNTIF(C2:C315,"月")の関数で動いたのですが、未来の日にちのセルには”0”が入っており正しい平均計が出ていません。 色々と調べて{=AVERAGE(IF(WEEKDAY($D$6:$C$36,1)=1,$E$6:$E$36))} Shift+Ctrl+Enterを押すものもも試してみましたが平均値が0になり正しく動きませんでした。どなたかアドバイスお願いいたします。

みんなの回答

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

 過去の日付の内、月曜日の日が何日あるのかを計算するためには、現在の日付が何日であるのかが判らなければなりません。  しかし、現在の日付が何日であるのかを決めるのに、TODAY関数やNOW関数を使用した場合、最新の売り上げのデータを入力していない場合であっても、現実の日付が変わる度に過去の日数が増え続けるため、例えば、月曜日の日に管理表のあるExcelファイルを開いた場合等には、その日の売り上げデータは未だ入力されていないにも拘らず関わらず、未来ではない月曜日の日数は増える事になります。  更に、管理表のファイルを1月毎や1年毎に新たに作成し、それまでのデータは、過去のファイルとして保存しておく様な場合には、過去のファイルの売り上げデータは更新される事はないにも関わらず、合計値を割る方の、過去の月曜日の日数は、現実の日数が1週間経つ毎に、1日ずつ増え続けて行く事になりますから、1週間毎に表示される値が変わってしまう事になります。  ですから、売り上げデータを最後に更新した日付を、Excelの同じBook内の何処かのセルに記載しておき、その日付に対して過去、現在、未来を決めなければなりません。  それから、未来の日付のデータと未来ではない日付のデータを区別するためには、そのデータが何日の日付のものなのかが判らなければなりません。  御質問文中の数式から推理すれば、C2~C315に曜日のデータが存在するらしい事は想像出来なくもありませんが、日付のデータが何処に入力されているのかが、御質問文中には記載されていません。  又、売り上げの曜日別の平均を求めたいという事ですが、売り上げデータが何処に入力されているのかも、数式から推理出来なくもないというだけで、明記されてはいません。  御質問されるのであれば、これらの必要となる情報を明記して頂く様御願いします。  必要な情報が明記されていないため、何処に何のデータが存在しているのかに関しては、取り敢えず仮定の話とした上で、回答させて頂きます。  今仮に、売り上げテータの最終更新日がA1セルに入力されていて、B2~B315に日付が入力されているものとします。  もし、行が下へ行くに従って日付が新しくなっている場合には、次の様な関数にされると良いと思います。 =SUMIF($C$2:$C$315,"月",$D$2:$D$315)/COUNTIF($C$2:INDEX($C:$C,MATCH($A$1,$B:$B)),"月")  又、もしも、データが日付順に並んでいない場合には、SUMPRODUCT関数を使用した次の様な数式で計算する事が出来ますが、SUMPRODUCT関数を使用した場合には、コンピューターの計算処理の負荷が若干増えてしまいます。 =SUMIF($C$2:$C$315,"月",$D$2:$D$315)/SUMPRODUCT(($B$2:$B$315<=$A$1)*($C$2:$C$315="月"))  又、作業列を使用した次の様な方法もあります。  今仮に、Z列を作業列として使用する事にします。  まず、Z2セルに次の数式を入力します。 =IF(AND(ISNUMBER($B1),$B2<=$A$1),$C2,"")  次に、Z2セルをコピーして、Z3以下に貼り付けます。  後は、月曜日の曜日別平均値を表示させるセルに、次の数式を入力します。 =SUMIF($C$2:$C$315,"月",$D$2:$D$315)/COUNTIF($Z:$Z,"月")  尚、御使いのExcelのバージョンがExcel2007以降である場合には、AVERAGEIFS関数が最も適しています。 =AVERAGEIFS($D:$D,$B:$B,"<="&$A$1,$C:$C,"月")

hinata0915
質問者

お礼

私の頭では付いていけず途中で根をあげておりました。しかしながらやっと完成いたしましたので今更ながらお礼申し上げます。ありがとうございます

  • yomyom01
  • ベストアンサー率12% (197/1596)
回答No.5

COUNTIF()の代わりにCOUNTIFS()?

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

例えばB2セルから下方には日付が入力されており、C列の曜日の表示はC2セルに次の式を入力して下方にオートフィルドラッグされているとします。 =IF(B2="","",TEXT(B2,"aaa")) そこで平均を求める式ですがD列には未来の日付については0が表示されているとのことですね。過去のデータについても0のデータは記載がないとすれば次の式で求めることができます。 =SUMIF(C2:C315,"月",D2:D315)/SUMPRODUCT((C2:C315="月")*(D2:D315>0)) また、過去の日付でも0または記載がない場合でも平均に含めるのであれば次のような式になりますね。 ただし本日が月曜日で売り上げのデータが入力されていなくても本日までの平均が表示されます。 =SUMIF(C2:INDIRECT("C"&MATCH(TODAY(),B2:B315,1)),"月",D2:INDIRECT("D"&MATCH(TODAY(),B2:B315,1)))/COUNTIF(C2:INDIRECT("C"&MATCH(TODAY(),B2:B315,1)),"月")

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

配列数式を使うことが良いかどうか別にして 又http://pc.nikkeibp.co.jp/pc21/special/hr/hr3.shtmlの「配列が使える関数」 のような記事があるので、注意して、やって見た 例 データ A1:C23 2011/5/1 1 1 2011/5/2 2 2 2011/5/3 1 3 2011/5/4 2 4 2011/5/5 3 5 2011/5/6 4 6 2011/5/7 2 7 2011/5/8 0 1 2011/5/9 4 2 2011/5/10 1 3 2011/5/11 2 4 2011/5/12 3 5 2011/5/13 4 6 2011/5/14 5 7 2011/5/15 0 1 2011/5/16 2 2 2011/5/17 3 3 2011/5/18 4 4 2011/5/19 5 5 2011/5/20 6 6 2011/5/21 1 7 2011/5/22 2 1 C列は参考まで出した。関数で=WEEKDAY(A2) ーー =AVERAGE(IF((WEEKDAY($A$2:$A$23)=1)*($B$2:$B$23<>0),B$2:B$23)) でSHIFT+CTRL+ENTERで 1.5 になって、うまく行くようです。 またデータの入ってない範囲まで指定して =AVERAGE(IF((WEEKDAY($A$2:$A$33)=1)*($B$2:$B$33<>0),B$2:B$33)) でSHIFT+CTRL+ENTERで エラーにならず1.5 になりました。 ーーーーーーーーーーー SUMPRODUCT関数を使うやワーク列をつくり該当行に1を出してAVERAGEを出す方法もあると思う。

  • pai3_14
  • ベストアンサー率56% (319/566)
回答No.2

SUM関数で 合計を出し、それを COUNT関数(数値が入力されたセルの数) で割ればいいのでは?

参考URL:
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/count.htm
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

方法1: 仮にB列に「年/月/日」で日付が記入してあるとすると C列には C2: =TEXT(B2,"aaa") のように曜日を文字列でしっかり計算で出しておいて, その上で「今日以前の月曜日の平均」を =SUMPRODUCT((B2:B315<=TODAY())*(C2:C315="月"), D2:D315)/SUMPRODUCT((B2:B315<=TODAY())*(C2:C315="月")) のように計算します。 方法2: ご利用のエクセルのバージョンがご質問に書かれていませんので,Excel2007以降を使い =SUMIFS(D2:D315,B2:B315,"<="&TODAY(),C2:C315,"月")/COUNTIFS(B2:B315,"<="&TODAY(),C2:C315,"月") のように計算します。

関連するQ&A

  • 曜日別売上平均の出し方を教えてください

    エクセルで売上管理表の作成途中なんですが、曜日別の売上&売上平均のところで困ってます。 曜日別売上合計は=SUMIF(D6:D36,1,E6:E36)の関数で問題なく動いたのですが、曜日別平均の関数が判らなくて困ってます。 色々と調べて{=AVERAGE(IF(WEEKDAY($D$6:$C$36,1)=1,$E$6:$E$36))}という関数を試してみましたが動きませんでした。 どなたかアドバイスお願いいたします。

  • 曜日別平均売上の関数

    エクセルで下記のように月次のデータがあり、曜日別の売上や来店数の平均を出したいと考えています。日々の数値は別のシートからデータをもってきておりので未来のところは0になります。月の途中で随時曜日別の平均値が表示されるようにするには、どんな関数を使えばよろしいですか? 日 曜日 売上 来店数 1 月  10000 50 2 火  20000 60 3 水  30000 70 4 木   0  0

  • 曜日別の平均を求める元データが毎日更新される時の計算式

    A列に日付、B列に曜日、CからE列に各品目の数量、F列に平均があります。 今日の日付以降は数値が空欄です。 この表を元に、曜日別の平均の表を作りたいのですが、今は =SUMIF($B$2:$B$[今日の日付までのセル番号],"月",$Z$2:$Z$[今日の日付までのセル番号]) =COUNTIF($B$2:$B$[今日の日付までのセル番号],"月") この二つの式から求めています。 この方法だと、毎日今日のデータを入力した後、範囲を更新しなければなりません。 他に簡単な方法はないでしょうか。

  • EXCELの平均を出す関数について

    初歩的な質問となりますが、 どうぞよろしくお願いいたします。 sheet1に下記のようなデータがあります。   A    B    D 1 日付  売上  平均 2 7/1   200    3 7/2   100   =AVERAGE(B2:B3) 4 7/3   300   =AVERAGE(B2:B4) 5 7/4   200   =AVERAGE(B2:B5) 6 7/5         ・ 7 7/6         ・ ・  ・          ・ ・  ・          ・ ・  ・          ・ 32 7/31        =AVERAGE(B2:B5) 現在B6までデータが入力されています。 D列に今日までの平均を表示したいのですが、 上記のようなAVERAGE関数をD32まで先に埋めてしまった場合、 B6:B32のあす以降の計算結果も出てしまいます。 B列のセルに入力がない限り、 今日の日付以降を計算しない(空欄)ようにする方法はありますか? よろしくお願いいたします。

  • Excelで10回ずつ測定したデータの平均を表にする方法が分からなくて

    Excelで10回ずつ測定したデータの平均を表にする方法が分からなくて困っています。 データが1万個くらいあるのですが、 =AVERAGE(D16:D25) と入力してオートフィルを使っても、 =AVERAGE(D17:D26) と表示されてします。 このように少しずつずらすのではなく =AVERAGE(D16:D25)  =AVERAGE(D26:D35) =AVERAGE(D36:D55) と表示していきたいのですがやり方が分からなくて困ってます。 データが多く1つずつ手打ちするのが大変なのですが、簡単な方法はありませんか?

  • エクセル2003の「串刺し集計」について教えてください。

    年度別の売上等の集計表を作っています。 月毎にシート名を「0604」、「0605」・・・とし、半期毎にも集計を かけたいと思っています。(0604~0609のシート間) それぞれのシートは同じ表で、B列に「曜日(月~日)」が D列には「客数」が入っています。 そこで「特定の曜日の客数」を半期毎の集計シート(0609の後)に 表示させようとして、下記のような関数を入れました。 =sum('0604:0609'!,sumif($c$2:$c$30,"月",d2:d30)) しかし、「入力された数式は正しくない」と表示されてしまい ヘルプを参照しましたが、一般的な入力時の注意だけでした。 SUMにはSUMIFを組み合わせられないのでしょうか? 参照するセルの値が変わっても、集計結果に反映される関数を 教えていただけませんでしょうか。

  • エクセルで曜日を自動的に表示させたいです。

    よろしくお願いします。ややこしい質問ですが皆様の お知恵をお貸しいただきたいです。 1.A1に「2007」←年 2.B1に「1」←月 3.C1に「11」←日 以上のように入力したときにD1に曜日を表示させたいと思っています。表示形式は「月曜日」といった感じにしたいです。 どのような数式にしたらよろしいのでしょうか? また、D2・D3に指定した日の翌日、二日後の曜日を 表示させるときにD2・D3に入力すべき数式を教えていただきたいです。 さらに、可能であればD1に1月30日の曜日を表示させたとき D3は2月1日の曜日を表示すると思いますが、 月が変わるときは「表示しない」としたいです。 わがままな条件ばかりを羅列してしまいましたが、よろしくお願いします。 自分自身数式に関して無知な人間なので質問の難易度が解っていません、難しすぎたり簡単すぎたら申し訳ありません。

  • 平均の出し方

    Excel初心者です。 下記のような平均を出す関数を教えてください。 日毎に3列使い、日々の処理数を集計しています。 A列、B列、D列、E列は数値又は空欄。 日計:C列はsum(A:B) 日計:F列はsum(D:E) 月合計計:Q列はsum(C,F・・・) Z列に処理平均を出したい。 C列とF列の値がゼロの時は平均の対象外にする。 average(C4,F4)とすると、数式が入っているせいか、結果が1.5になってしまいます。 ここにゼロや数式が入っているセルを除いた平均を出し、Z4に3と出るようにしたいです。 範囲が10個以上あるので、範囲指定もうまくできません。   A   B   C     D    E    F  ・・・    Q        Z 1 9/1           9/2               9月 2 午前 午後 終日  午前 午後 終日       月合計   処理平均 3  4   1   5    1    3   4         9       4.5 4               2    1   3         3        3 5  1   5   6                      6        6 6  6   1   7    5       5         12        6 宜しくお願い致します。

  • 二項目の平均

    教えて下さい。 A B   C   D   E    F   G   H    I 1        1学期        2学期 2 氏名 国語 算数 平均  国語 算数 平均  総平均  3   a男  70  60   65.0   60  65  62.5  4  b子  75  50   62.5   70  60  65.0 5  c子  77  40   58.5   80  50  65.0   Excelwで上記の様な「I列」を求める場合Average関数を使い(C3:G3)と すると「E列」の1学期の平均まで含めて計算します。 C、D、F、G列だけの平均を求めたいのですが・・・ お願いします。

    • ベストアンサー
    • HTML
  • 行が変わったときの平均値の出し方

    行が変わったときの平均値の出し方 いつもお世話になります。 WINDOWS XP   EXCELL2003 B3~G3はうまくいくんですが 例えばF3には =IF(F2="","",IF(COUNTBLANK(B2:F2)=5,"",AVERAGE(B2:F2))) 7月から6の行に変えたときが上手くゆきません。 B8に以下のように試したのですが (1) = IF(B7="","",IF(COUNTBLANK(B2:G2+B7)=7,"",AVERAGE(B2:G2+B7)) (2) = IF(B7="","",IF(COUNTBLANK(B2:G2),B7)=7,"",AVERAGE(B2:G2),B7))) (3) =IF(B7="","",IF(COUNTBLANK(B2,C2,D2,E2,G2,B7)=7,"",AVERAGE(B2,C2,D2,E2,G2,B7))) ご教示願えませんか。 宜しく御願いします。

専門家に質問してみよう