- ベストアンサー
連続する日付毎に 値が入っている表があります。
連続する日付毎に 値が入っている表があります。 「月曜日の平均」 「土曜日の平均」 というように、7行毎に出現する任意の曜日の平均を とりたいと思います。 =b1+b8+b15 ・・・ のように、ひとつずつ数式を書くという方法 VBを使う方法 以外で、 なにか方法はありませんでしょうか。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 曜日の列が手入力で文字列の場合は簡単です。 その場合↓の画像の場合F3セルに =IF(E2="","",SUMPRODUCT((B2:B2000=E2)*(C2:C2000))/COUNTIF(B2:B2000,E2)) という数式をいれれば大丈夫だと思います。 (2000行目まで対応できる数式です) しかし、仮にB列(B2セル)を =A2 としてオートフィルで下へコピーし、 表示形式だけを aaa や aaaa としている場合はシリアル値になりますので 数式が少し長くなります。 その場合の方法です。 ↓の画像のようにH2~I8セルに 日~土までを 1~7 の表にしておきます。 そして、F3セルに =IF(E2="","",SUMPRODUCT((WEEKDAY(B2:B2000)=VLOOKUP(E2,H2:I8,2,0))*(C2:C2000))/SUMPRODUCT((WEEKDAY(B2:B2000)=VLOOKUP(E2,H2:I8,2,0))*(C2:C2000<>""))) という数式を入れればE2セルに曜日を入力すると、その曜日の平均が表示されると思います。 以上、参考になれば良いのですが 外していたらごめんなさいね。m(__)m
その他の回答 (6)
- tom04
- ベストアンサー率49% (2537/5117)
No.5です! たびたびごめんなさい。 別案です。 一番簡単な方法はSUBTOTAL関数ではないでしょうか? 前回の画像の表をそのまま使わせてもらいます。 SUBTOTAL関数はオートフィルタと併用になりますので、 オートフィルタで非表示の行に数式を入れたのでは見えなくなってしまいます。 そこで1行目だと必ず表示されますので、1行目に表示するようにします。 E1でもF1でもどこでも良いのですが、 =SUBTOTAL(1,C:C) という数式を入れ、オートフィルタで好みの曜日を選択してみてください。 その平均が表示されるはずです。 どうも何度も失礼しました。m(__)m
- layy
- ベストアンサー率23% (292/1222)
excelですから、 >連続する日付毎に 値が入っている表 を 曜日順に並べ替えたシートを別途作成する、 という手もいいのではないでしょうか。 sumproductやweekdayを知らなくても、バージョンが2007や2010だろうが、 これなら曜日毎の件数や合計も出すのに単純な手順になるかと思います。 関数等を駆使した求め方ばかり考えるではなくて、 知っている仕掛けで求めたいようにするのも手です。 (今回は平均という基本的な計算だったから、ですが・・・・。) A B C 1 2005/9/26 月 1 1737 2010/6/28 月 34 月曜の件数 月曜の合計 月曜の平均 2 2005/9/27 火 0 1738 2010/6/29 火 39 火曜の件数 火曜の合計 火曜の平均 3 2005/9/28 水 1 1739 2010/6/30 水 26 水曜の件数 水曜の合計 水曜の平均 4 2005/9/29 木 2 木曜の件数 木曜の合計 木曜の平均 ::: 基本的には「便利なもの」じゃなくて 「確実に自分自身で理解できて使えるもの」「使いこなせるもの」を使ってください。
- imogasi
- ベストアンサー率27% (4737/17070)
(1)何処かの列に、曜日の文字列(月曜日なあど)があるとか、曜日コードがあるなら (2)曜日コードや文字列を入れる列を作業列として1列使っても良いなら (3)2007を使っているなら AVERAGEIF関数で解決する単純な話だと思う。 エクセル・バージョンを質問には書くこと。2007を使っておれば、質問異もならない質問。 ーー 2007以外なら、SUMIFとCOUNTIFを使い、両者を割り算して出すとか。 条件が2つ以上なら、SUMPRODUCTも使える。 ーー 配列数式というのも使える 例データ A列(日付) B列(データ) C列(参考) C列はアザ際実際はシート上に無い。関数は=WEEKDAY(A2)を下方向に式複写。確認用。 2010/7/10 1 7 2010/7/11 2 1 2010/7/12 3 2 2010/7/13 4 3 2010/7/14 5 4 2010/7/15 6 5 2010/7/16 7 6 2010/7/17 8 7 2010/7/18 9 1 2010/7/19 10 2 2010/7/20 11 3 2010/7/21 12 4 2010/7/22 1 5 2010/7/23 2 6 2010/7/24 3 7 2010/7/25 4 1 2010/7/26 5 2 2010/7/27 6 3 2010/7/28 7 4 どこか結果を入れるセルに =AVERAGE(IF(WEEKDAY(A2:A23)=2,B2:B23,"")) とト入れてSHIFT+CTRL+ENTER(3つのキーを同時押しすること) 結果 3、10、5の平均で 6
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
月曜日の場合 =SUMIF(B:B,"月",C:C)/COUNTIF(B:B,"月") ただし、B1セル =TEXT(A1,"aaa")
- aokii
- ベストアンサー率23% (5210/22063)
計算結果に間違いが無いように、例えば、以下のようにデータを見やすくしてみてはいかがでしょう。 C2セル=IF($A2=C$1,$B2,"") C23セル=AVERAGE(C2:C22) 曜日 データ 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日 日曜日 月曜日 1 火曜日 2 水曜日 3 木曜日 4 金曜日 5 土曜日 6 日曜日 7 月曜日 1 火曜日 2 水曜日 3 木曜日 4 金曜日 5 土曜日 6 日曜日 7 月曜日 1 火曜日 2 水曜日 3 木曜日 4 金曜日 5 土曜日 6 日曜日 7 曜日の 平均
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
sumif関数とcountif関数を使う方法や、sumproduct関数を使う方法 があります。曜日を現わす文字列がどこかの列にあるのならsumifと countifが判りやすいですし、日付からいきなりやるならsumproduct が汎用的です。sumifやcountifは条件に関数を使えないので。 本当は質問で表の構造を書いておいてくれるといいんですが、B列を 足し算しているところからA列が日付でB列が値という構造だとしま す。そうするとsumproduct関数で =sumproduct((weekday(A1:A500,1)=2)*B1:B500)/sumproduct((weekday(A1:A500,1)=2)*1) の様に「weekday関数の返り値が月曜日に相当する」という論理値に B列の値をかけると月曜日の合計になり、1だけかけると月曜日のカ ウントになることを利用します。もちろんweekday関数の代わりに text関数で書式"aaa"の返り値が"月"になるんでもオッケーです。
補足
早速ありがとうございます。 教えていただいた式をシートに書いてみたのですが、 うまくいきませんでした。 表は以下のようなものです。 よろしければ、この表の番地で教えていただけませんでしょうか。 -------------------------------------------------- A B C 1 2005/9/26 月 1 2 2005/9/27 火 0 3 2005/9/28 水 1 4 2005/9/29 木 2 : : : 1737 2010/6/28 月 34 1738 2010/6/29 火 39 1739 2010/6/30 水 26