見出し画像

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)

これで出ました。以上。

なんか、すごく遠回りしてしまったので健忘録として。
また、すごく遠回りしてる誰かに役立ちますように。

いいなと思ったら応援しよう!