
Googleスプレッドシートで曜日別平均を出すのに迷走した話
すごく迷走して何日かかかってしまったんですけど、結論から言うと
=AVERAGEIF(ARRAYFORMULA(WEEKDAY(【日付の入ってるセル範囲】,2)),【曜日の数値】,【平均を出したい数値のセル範囲】)
で解決しました。
順を追って説明します。
まず、A列に日付が入っていて、B列に個数(という名の数値)が入っている表をざっくり作りまして。
この個数を曜日別に平均値を出したいと考えました。

こんな感じ。
普通に考えれば、条件のある平均値を求めるので、AVERAGEIFで良いと思うんです。
AVERAGEIF(検索範囲, 検索条件, [平均範囲])
ね。簡単でしょ?
て、感じだったんですけど、ここで問題になったのが、日付のセルには日付情報しか入ってないので、曜日の値を関数で持ってこないといけないということでした。
初めはTEXT関数がいいかな〜と思って、次のように関数を書きました。
AVERAGEIF(TEXT(A13:A24,"DDDD"),"月曜日",B13:B24)
結果

oh...
悪あがきでWEEKDAY関数でもトライしてみました。
AVERAGEIF(WEEKDAY(A13:A24,2),1,B13:B24)

知ってた。
そもそも、WEEKDAY(A13:A24)がエラー出るので、そりゃAVERAGEIFも出ないです。
唯一WEEKDAY(A13:A24)でエラーが出なかったのがC13からC24。

へぇ……こんな動きするんだ……
て思いました。
この列さえあればね、
AVERAGEIF(C13:C24,1,B13:B24)
でさ、曜日別の平均値だせちゃうってわけ。
簡単にね。
でも日付のセルだけで出したいんだ!!!!!!
でね、迷走しましてね。
SUMIFをCOUNTIFで割ったりとかね、意味のないことしたりね、AVERAGE(IF(WEEKDAY()))とかやったりね、それAVERAGEIFと変わらんやんけみたいなね。
そうなのよ、結局、範囲で曜日を取ってこれなきゃ全部意味がないのよ!!
てわけで、出てきたのが、ARRAYFORMULA。
いやこれ、こんな時にも使えるんですね……。
ARRAYFORMULA(配列数式)
→配列数式から返された値を複数行または複数列に表示したり、非配列関数で配列を使用したりすることができます。
もうなんか、てっきりオートフィル不要の便利関数くらいに思ってました。
正直今もちょっと思ってる。
これを使って、こう。
AVERAGEIF(ARRAYFORMULA(WEEKDAY(A13:A24,2)),1,B13:B24)
これで出ました。以上。
なんか、すごく遠回りしてしまったので健忘録として。
また、すごく遠回りしてる誰かに役立ちますように。