- ベストアンサー
月ごとに自動で平均を出したい
vistaでエクセル2007を使用しています たとえば縦軸に 9月 1日 33 44 55 2日 63 24 75 3日 43 64 35 : : とあります 最終行に月平均を出しているのですが 毎月30日の時はシートの平均を AVERAGE(D4:D33)で出して 31日の時はD33を34にしたり また翌月は33に変更したりしているのですが これを自動で30日の時、あるいは10月なら30日とか 計算してくれるようにすることは 可能でしょうか? 入力データから 毎月複数のシートを変更しなくてはならず 面倒といったら面倒なんです。 30日用のデータと31日用のデータに分けて作って 月によって変更しようかとも 思ったのですが毎月些細な変更があり そうもできないのです 出来ないのでしたらしょうがないのですが なんとかうまくできる方法があれば お教え願えますでしょうか
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
回答No4です。 A4セルへの入力の式は次のようにしてください。 =IF(MONTH(DATE(YEAR($A$1),MONTH($A$1),ROW(A1)))<>MONTH($A$1),"",DATE(YEAR($A$1),MONTH($A$1),ROW(A1))) <>の前に)が一つ足りませんでした。大変失礼いたしまいた。 式の意味はA1セルのデータを使って年や月は決めていますが日にちは1日から始まるのでROW(A1)としてA4セルでは1となります。それが下の行に移るにつれて、例えばROW(A32)となった場合には自動的に月の値が次の月に変わって日にちも変わることになります。その月がA1セルの月と変わらない間は日付を表示していきますが、A1セルの日付の月とROW関数を入れた日付の月が違う(<>)場合にはセルを空白にしなさいということになります。 A1セルに2009/10/1と入力すれば10月31日までは10月で表示されますが11月になれば空白のセルにすることになります。
その他の回答 (4)
- KURUMITO
- ベストアンサー率42% (1835/4283)
AVERAGE関数は数値の合計を数値の入力されているセルの数で割って求めているので30日が31日になっても問題は無いでしょう。 どうやら月の変化による月末の日にちを問題にしているようですね。 月末の日にちはうるう年などでも変わりますので年のデータも必要となります。 例えば9月と行ってもいつの年かを設定したうえで9月と表示するようにしてはどうでしょう。 月と表示するセル例えばA1セルに2009/9/1と入力してから右クリックして「セルの書式設定」を選択し、「表示形式」タブの「ユーザー定義」で種類の窓に m"月" と入力してOKします。これでセルには9月と表示されます。 そこで例えばA4セルに1日、A5セルに2日、・・・・・表示させるためにはA4セルに次の式を入力して下方にオートフィルドラッグします。 =IF(MONTH(DATE(YEAR($A$1),MONTH($A$1),ROW(A1))<>MONTH($A$1),"",DATE(YEAR($A$1),MONTH($A$1),ROW(A1))) その後にそれらのセルの「セルの書式設定」から表示形式のユーザー定義で d"日" とすればよいでしょう。これで指定された月の月末の日にちまでが自動的に表示されます。 なお、指定された月の月末の日にちは次の式で求めることができます。 =DAY(EOMONTH(A1,0)) AVERAGE(D4:D33)関数ではデータが無い空白のセルは当然無視されてデータが入っているセルのみが平均に使われます。データが入っていなくてもその月の日数で平均を求めたい場合には次のような式になりますね。 =SUM(D4:D34)/DAY(EOMONTH(A1,0)) 長々と説明しましたがご参考になりましたら幸いです。
補足
仕事が立て込み遅くなり申し訳ありません 丁寧にお教えいただきましてありがとうございます =IF(MONTH(DATE(YEAR($A$1),MONTH($A$1),ROW(A1))<>MONTH($A$1),"",DATE(YEAR($A$1),MONTH($A$1),ROW(A1))) 参考に入力テストを行っていたのですが 上記のとおり A1セルに行って A4セルに式を入力したのですが この関数に関して多すぎる因数が入力されていますと エラーが出ます 途中の""の部分です どのような意味なのかわからずに困っています 再度お教えいただければ幸いです
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! すでに回答は出ていますが・・・ AVERAGE関数は空白セルや文字列のセルは無視されますので、 極端に言えばD列全てを範囲指定して =AVERAGE(D:D) という数式でも希望の結果は得られると思いますよ。 (D列には平均値を求めたい数値だけということが前提です) 以上、参考になれば幸いですが、 的外れなら読み流してくださいね。m(__)m
- boro-pc
- ベストアンサー率30% (64/208)
そもそも >31日の時はD33を34にしたり >また翌月は33に変更したりしているのですが これはやらなきゃダメですか? 全てを31日分の範囲にしてあげても良いのでは?と思います 数値を入れなければAVEは無視してくれるので結果が変わらないはずですよ
- neko2koban
- ベストアンサー率39% (49/125)
AVERAGE関数ならば、数値の入っていないところ抜きで平均をだしてくれます なので、31日分を用意して、30日などの月は31日の部分を空欄にして 同じ表を使うと良いですよ
お礼
ありがとうございます 参考になりました 数値の場合は変更しないでも 大丈夫なのですね おかげで今まで無駄な手間をかけていたとわかりました 引用した値で数式を計算している場合は 計算値が0と出てしまい そこは値が狂ってしまいます この場合はどのようにしたらよいのでしょう?
お礼
なるほど大変参考になりました 勉強させていただきありがとうございました ありがとうございました