Deprecated : The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
曜日ごとに平均を求める:エクセル練習問題
Home »
エクセル練習問題:目次 »
曜日ごとに平均を求める
更新:2025/9/12;作成:2020/10/8
問題1:各日付別の入園者データがあります。月曜日〜日曜日の各入園者数の平均を求めなさい。
なお、休園日には「休園」と入力しています。 問題1の解答
データの出典:札幌市円山動物園入園者数 https://ckan.pf-sapporo.jp/dataset/sapporo_maruyama_zoo_visitors
B
C
2
日付
総入園者数
3
2024/3/1
768
4
2024/3/2
971
5
2024/3/3
2,048
6
2024/3/4
962
7
2024/3/5
1,132
8
2024/3/6
1,216
9
2024/3/7
853
10
2024/3/8
1,134
11
2024/3/9
2,329
12
2024/3/10
2,109
13
2024/3/11
1,294
14
2024/3/12
1,015
15
2024/3/13
休園
16
2024/3/14
1,527
17
2024/3/15
1,231
18
2024/3/16
2,765
19
2024/3/17
1,919
20
2024/3/18
1,063
21
2024/3/19
960
22
2024/3/20
3,051
23
2024/3/21
1,483
24
2024/3/22
1,604
25
2024/3/23
3,410
26
2024/3/24
4,800
27
2024/3/25
2,156
28
2024/3/26
2,553
29
2024/3/27
休園
30
2024/3/28
3,323
31
2024/3/29
1,045
32
2024/3/30
3,498
33
2024/3/31
4,829
解答例
下表の計算結果になります。
わかりやすいように、B列の表示形式を yyyy/m/d(aaa) として曜日も表示しています。
Excel for Microsoft365を使っている場合は、配列を処理する関数で数式を作成することができます。 (記 2025/9/12)
GROUPBY関数 はExcel for Microsoft365で利用できます。
=GROUPBY(TEXT(B3:B33,"aaaa"),C3:C33,AVERAGE,,0)
と入力します。
一応、曜日ごとに平均値が計算できましたが、曜日の並びが文字コード順に並んでいます。
月曜日〜日曜日 にしたいと思います。
配列を WEEKDAY(B3:B33,2) で作成します。Weekday関数で 日付の曜日を1〜7の数値に計算します。
この配列をHSTACK関数 でB列に付け足します。
HSTACK関数は Excel2024から使用できます。
D3セルに
=GROUPBY(
HSTACK( WEEKDAY(B3:B33,2) , TEXT(B3:B33,"aaaa") ) ,
C3:C33,AVERAGE)
と入力します。
D列が邪魔なので Drop関数 で削除します。
DROP関数は Excel2024から使用できます。
E3セルに
=DROP(
GROUPBY(
HSTACK(WEEKDAY(B3:B33,2),TEXT(B3:B33,"aaaa")),
C3:C33,AVERAGE,,0 ),,1)
と入力しました。合計を表示しない設定にしています。
トリム参照 では以下のように書くことも可能です。増減するデータに対処できます。
=DROP(
GROUPBY(
HSTACK(WEEKDAY(B3:. B100,2),TEXT(B3:. B100,"aaaa")),
C3:. C100,AVERAGE),,1)
と入力します。
Microsoft365ではFILTER関数を使うことができます。
FILTER関数の詳細な使い方は FILTER関数でデータを抽出する をご覧ください。
数式のセル範囲が間違っていました。B33、C33が最終行でしたがB31,C31としていました。(2025/9/12 に修正しました)
F3セルに =AVERAGE( FILTER( $C$3:$C$33 , TEXT($B$3:$B$33,"aaaa")=E3 ) ) と入力しています。
FILTER関数で 月曜日の入園者数を配列に抽出しています。抽出した配列をAVERAGE関数で平均しています。
F3セルの数式をF9セルまでコピーします。
なお、下図のように、休園日のある曜日の計算は 、Filter関数で水曜日のデータを I列に取り出しています。
これをAVERAGE関数で平均していますので、休園のセルは無視して計算されることがわかります。
配列数式にして計算することができます。 TEXT(($B$3:$B$21,"aaaa") の部分で B3:B21セルの日付(シリアル値)から Text関数で曜日を取り出しています。
E列の曜日とを比較して、曜日が一致したら、C列の販売金額を平均するという仕組みになっています。
計算式は F3セルに
=AVERAGE(IF(TEXT($B$3:$B$33,"aaaa")=E3,$C$3:$C$33))
と入力します。
Excel for Microsoft365,Excel2021以降のスピルが利用できるバージョンでは動的配列数式が利用できるので、F3セルにそのまま入力して、F9セルまで数式をコピーします。
この数式は配列を扱うための数式にしてありますので、
Excel2019より前のスピルが利用できないバージョンでは
=AVERAGE( IF( TEXT($B$3:$B$33,"aaaa")=E3 ,$C$3:$C$33) ) と入力して、[Shift] + [Ctrl] + [Enter] で入力を確定する必要があります。
すると、{ =AVERAGE( IF( TEXT($B$3:$B$33,"aaaa")=E3 ,$C$3:$C$33) ) }
数式の前後が { } でくくられ、配列数式として入力が確定されます。
配列数式を使わない方法としては、作業列を使用する方法が考えられます。
作業列に曜日を書き出します。
E列の曜日と同じスタイルにするため D3セルの数式は =TEXT(B3,"aaaa") としました。
条件付きの平均の計算になりますので、AVERAGEIF関数が使用できます。
AVERAGEIF関数はExcel2007以降で使用できます。
また、Excel for Microsoft365、Excel2021ではスピルが使えます。
F3セルには =AVERAGEIF(D3:D33, E3:E9 ,C3:C33) と入力しました。
スピルの機能が働いて、F9セルまで計算結果が表示されました。
スピルの機能が使えない場合(Excel2019以前のバージョン)は、絶対参照や複合参照の設定が必要になります。
F3セルに
=AVERAGEIF($D$3:$D$33,E3 ,$C$3:$C$33)
と入力して、下方向へコピーします。
作業列に =TEXT(B3,"aaaa") と入力して、曜日を表示します。
[挿入]タブの[ピボットテーブル]を実行します。
ピボットテーブルの作成ダイアログボックスが表示されます。
テーブル/範囲に B2:D31 が設定されているのを確認します。
ピボットテーブルを配置する場所を選択してください。で「既存のワークシート」にチェックを入れて、セルを指定します。
フィールドを下図のように、行に「作業列」、Σ値に「総入園者数」をドラッグして設定します。
[個数/総入園者数]となっているので、[平均/総入園者数]に変更します。
Σ値で「個数/総入園者数」となっているときは、ピボットテーブルのフィールドでラベルを右クリックして、リストから[値の集計方法]→[平均]をクリックします。
セルの表示形式はピボットテーブルのフィールドでラベルを右クリックして、リストから[値フィールドの設定]をクリックします。
値フィールドの設定 ダイアログボックスで[表示形式]ボタンをクリックします。
セルの書式設定ダイアログで表示形式を設定することができます。
平均が計算できました。
スポンサードリンク
Home |エクセル練習問題:目次 |曜日ごとに平均を求める
PageViewCounter
Since2006/2/27