Googleスプレッドシートでまとめている内容から、「もし土日なら次々回の水曜、それ以外なら次回の水曜」を求めたかった。
イレギュラーなので、四苦八苦した。
3時間ほどかかってようやく導き出したので、書いておく。
エクセルについて書かれているネット記事も参考にしたので、エクセルでも使えるはず。
それがこちら。
=IF(or(WEEKDAY((A3),1)=1,WEEKDAY((A3),1)=7),FLOOR((A3)+3,7)+11,FLOOR((A3)+3,7)+4)
「もしA3が、土曜または日曜なら、最も近い土曜から11日後の日付を、それ以外なら最も近い土曜から4日後の日付を返す」
セルA3には、日時が入力されている。
数字は曜日を示している。 「+数字」は「n日後」を表している。
1 | 2 | 3 | 4 | 5 | 6 | 7 |
日曜 | 月曜 | 火曜 | 水曜 | 木曜 | 金曜 | 土曜 |
セルA3でなく「今日」の判定をするなら、(A3)をTODAY()に変更する。
=IF(or(WEEKDAY(TODAY(),1)=1,WEEKDAY(TODAY(),1)=7),FLOOR(TODAY()+3,7)+11,FLOOR(TODAY()+3,7)+4)
以下、私自身のための解説です。
知りたい方がいるかはわからないけど、書いておきます
IFとは
論理式が TRUE の場合はある値を返し、FALSE の場合は別の値を返します。
Google スプレッドシート>関数と数式の使用>IF
文系には分かりにくい……。
ある条件にあてはまれば、Aの値を返し、そうでなければAでない別の値Bを返すときに使う関数のこと。
半角で =if( と入力すると、解説が出てきて助かる。
画像の例だと、セルA2が「foo」だと「A2は山である」それ以外だと「A2は山ではない」という値が返ってきます。
スプレッドシートはこんな感じです。
A | B | |
2 | foo | A2は山である |
3 | fool | A3は山ではない |
4 | fon | A4は山ではない |
5 | foo | A5は山である |
6 | fooo | =if(A6=”foo”,”A6は山である”,”A6は山ではない”) |
OR
いずれかの引数が論理的に TRUE の場合は TRUE を返します。すべての引数が論理的に FALSE である場合は FALSE を返します。
Googleヘルプ>ドキュメントエディタヘルプ>OR
文系には分かりにくい……2
うっすらと覚えている、数学で習った「かつ・または」の話。
ORは「または」のほう。
どっちがに当てはまってたらOKってことです。
=IF(or(WEEKDAY((A3),1)=1,WEEKDAY((A3),1)=7),FLOOR((A3)+3,7)+11,FLOOR((A3)+3,7)+4)
だから、ここではA3=1 または、A3=7ならTRUEってことになります。
WEEKDAY
指定した日付に対応する曜日を数値で返します。
Googleヘルプ>ドキュメントエディタヘルプ>WEEKDAY
セルA3には日付が入力されていたんだっけ。
だからこの指定した日付に対応する曜日を数値で返してくれるってこと。
曜日を数値で…というのは、日曜始まりで1~7までの値が振られているらしい。
1 | 2 | 3 | 4 | 5 | 6 | 7 |
日曜 | 月曜 | 火曜 | 水曜 | 木曜 | 金曜 | 土曜 |
WEEKDAY((A3),1)=1,WEEKDAY((A3),1)=7
だから、WEEKDAY以降は、
((指定したセル),得る)=日曜,WEEKDAY((指定したセル),得る)=土曜 ってことなんだ……。
なんで「得る」が1なのか……、それは知らない。
FLOOR
指定した基準値の倍数のうち、最も近い整数の倍数に数値を切り捨てます。
Googleヘルプ>ドキュメントエディタヘルプ>FLOOR
だから文系……。
これに関しては、思いもよらない。ほんまに。
FLOORを使うと、基準値が指定できて、整数の倍数を求めることができるっぽい。
FLOOR((A3)+3,7)+11,FLOOR((A3)+3,7)+4
このFLOOR以降は、
(値(指定したセル)に3を足すとデフォルトの日曜始まりから水曜始まりになる,指定したセルに最も近い7の倍数)に11を足して指定したセルの次々回の水曜を求める, (値(指定したセル)に3を足すとデフォルトの日曜始まりから水曜始まりになる,指定したセルに最も近い7の倍数)に4を足して指定したセルの次回の水曜を求める
というふうになる。
1 | 2 | 3 | 4 | 5 | 6 | 7 |
日曜 | 月曜 | 火曜 | 水曜 | 木曜 | 金曜 | 土曜 |
日曜始まりを水曜始まりにするには、日曜1+3=水曜4 だから +3する。
日曜から土曜までは、1~7が繰り返されるから、7の倍数を求める。
((A3)+3,7) は、水曜始まりで次回の土曜の値にするってこと。
さらにそこに11や4を足して、11日後や4日後の日付を求める。
IF ORから振り返ると、
=IF(or(WEEKDAY((A3),1)=1,WEEKDAY((A3),1)=7),FLOOR((A3)+3,7)+11,FLOOR((A3)+3,7)+4)
「もしA3が、土曜または日曜なら、最も近い土曜から11日後の日付を、それ以外なら最も近い土曜から4日後の日付を返す」
となる。
ーん、式は合ってるけど、解釈は怪しい。
お気きの方は、文系にもわかるように教えてください
竹本ひろこ|コンテンツ組み立て人
メルマガでは、ブログにもSNSにも書かない、講座づくりやビジネスについて発信しています。ぜひご登録ください。