重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

連続する日付毎に 値が入っている表があります。

「月曜日の平均」
「土曜日の平均」
というように、7行毎に出現する任意の曜日の平均を
とりたいと思います。

=b1+b8+b15 ・・・
のように、ひとつずつ数式を書くという方法
VBを使う方法
以外で、
なにか方法はありませんでしょうか。

A 回答 (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
「連続する日付毎に 値が入っている表があり」の回答画像5
    • good
    • 0

No.5です!


たびたびごめんなさい。

別案です。
一番簡単な方法はSUBTOTAL関数ではないでしょうか?

前回の画像の表をそのまま使わせてもらいます。
SUBTOTAL関数はオートフィルタと併用になりますので、
オートフィルタで非表示の行に数式を入れたのでは見えなくなってしまいます。
そこで1行目だと必ず表示されますので、1行目に表示するようにします。

E1でもF1でもどこでも良いのですが、

=SUBTOTAL(1,C:C)

という数式を入れ、オートフィルタで好みの曜日を選択してみてください。
その平均が表示されるはずです。

どうも何度も失礼しました。m(__)m
    • good
    • 0

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 木曜の件数 木曜の合計 木曜の平均

:::

基本的には「便利なもの」じゃなくて
「確実に自分自身で理解できて使えるもの」「使いこなせるもの」を使ってください。
    • good
    • 0

(1)何処かの列に、曜日の文字列(月曜日なあど)があるとか、曜日コードがあるなら


(2)曜日コードや文字列を入れる列を作業列として1列使っても良いなら
(3)2007を使っているなら
AVERAGEIF関数で解決する単純な話だと思う。
エクセル・バージョンを質問には書くこと。2007を使っておれば、質問異もならない質問。
ーー
2007以外なら、SUMIFとCOUNTIFを使い、両者を割り算して出すとか。
条件が2つ以上なら、SUMPRODUCTも使える。
ーー
配列数式というのも使える
例データ
A列(日付)       B列(データ) C列(参考)
C列はアザ際実際はシート上に無い。関数は=WEEKDAY(A2)を下方向に式複写。確認用。
2010/7/1017
2010/7/1121
2010/7/1232
2010/7/1343
2010/7/1454
2010/7/1565
2010/7/1676
2010/7/1787
2010/7/1891
2010/7/19102
2010/7/20113
2010/7/21124
2010/7/2215
2010/7/2326
2010/7/2437
2010/7/2541
2010/7/2652
2010/7/2763
2010/7/2874
どこか結果を入れるセルに
=AVERAGE(IF(WEEKDAY(A2:A23)=2,B2:B23,""))
とト入れてSHIFT+CTRL+ENTER(3つのキーを同時押しすること)
結果
3、10、5の平均で
    • good
    • 0

月曜日の場合


=SUMIF(B:B,"月",C:C)/COUNTIF(B:B,"月")
ただし、B1セル =TEXT(A1,"aaa")
    • good
    • 0

計算結果に間違いが無いように、例えば、以下のようにデータを見やすくしてみてはいかがでしょう。


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
曜日の 平均
    • good
    • 0

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

補足日時:2010/07/12 14:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!