メモ — Excelで営業日絡みのなんかする関数まとめ(私家版) |
返信 |
こういうのをひとつかふたつ使う人はそこそこいるはずなんだけど、まとめて公開するほどのものでもないので、Web上で探そうとすると意外とまとまってない。
なので、自分のをぶっ壊したときのために貼っ付けておきます。
「週末としての土曜日」の扱い等、もっと感覚的でスマートな書き方がありそうな気がする部分もあるけど。
前提は以下4つ。
・土日は必ず休み
・土日以外の休日のリストはまとめて「休日」という名前で定義済み(画像のQ列)
・WORKDAY関数が使える状態
・なんかしたい日付はC2に入っている
休日明けのみ:「自身が土日祝日のどれでもなく、かつ、前日が土日祝日のどれか、なら○」
=IF(AND(NOT(OR(COUNTIF(休日,C2)=1,WEEKDAY(C2)=1,WEEKDAY(C2)=7)),(OR(COUNTIF(休日,C2-1)=1,WEEKDAY(C2-1)=1,WEEKDAY(C2-1)=7))),"○","")
休日明けではない日に条件付書式を適用させたい場合:「そうでなければいいので、もしを外して否定でくるむ」
=NOT(AND(NOT(OR(COUNTIF(休日,C2)=1,WEEKDAY(C2)=1,WEEKDAY(C2)=7)),(OR(COUNTIF(休日,C2-1)=1,WEEKDAY(C2-1)=1,WEEKDAY(C2-1)=7))))
休前日のみ:「前日を翌日にするだけ。自身は土日祝日ではない&翌日が休日。-1を+1に」
=IF(AND(NOT(OR(COUNTIF(休日,C2)=1,WEEKDAY(C2)=1,WEEKDAY(C2)=7)),(OR(COUNTIF(休日,C2+1)=1,WEEKDAY(C2+1)=1,WEEKDAY(C2+1)=7))),"○","")
週末からの連休明け営業開始日:「営業日としての自身の日数を、Excel内で日数の基準になってる日から通して数えて覚えておいて、さらにそれを7で割って余りも出しておく。そして、さっき数えた日数から今割った余りを引いて出る数字、その1営業日後。ただし、この計算の間、土日以外で休日になる日のリストを参照して、そこに含まれている日は日数には数えない。」
=WORKDAY(C2-MOD(C2,7),1,休日)
「何を言っているのかわからねーと思うが、7で割った余りを元から引いたと思ったらいつのまにか直前の土曜日になっていた。その1営業日後がつまり週明け初営業日。Excelの恐ろしさの片鱗を味わった」
週末からの連休明け営業開始日のみ:「挙げ句の果てに、今やった計算の最終的な答が自身と同じだったら、○」
=IF(C2=WORKDAY(C2-MOD(C2,7),1,休日),"○","")
「休日明けとの違いは、例えば画像で言うと1月12日に○が付くか付かないか」
週の最終営業日:「さっきのめんどくさいのとだいたい同じ。数え始めは自身の7営業日後からで、出た日付の1営業日前。リストにある日を無視するのも同じ」
=WORKDAY((C2+7)-MOD(C2+7,7),-1,休日)
週の最終営業日のみ:「えっと、同じ」
=IF(C2=(WORKDAY((C2+7)-MOD(C2+7,7),-1,休日)),"○","")
「休前日との違いも同じ。1月10日」
月の営業開始日:「自身の月を取得して、その月のゼロ日の1営業日後。ゼロ日ってなにとか考えない。休日の件は同じ」
=WORKDAY(DATE(YEAR(C2),MONTH(C2),0),1,休日)
月の営業開始日のみ:「同じだったら同じ」
=IF(C2=WORKDAY(DATE(YEAR(C2),MONTH(C2),0),1,休日),"○","")
月の最終営業日:「自身の月を取得して、その翌月1日の、1営業日前。休日の件は同じ」
=WORKDAY(DATE(YEAR(C2),MONTH(C2)+1,1),-1,休日)
月の最終営業日のみ:「ねえもうアイスたべたい」
以下蛇足。
作りながら、結局、土日休みの人が大勢なんだなあ、と思った。
例えば、たまに行くちゃんぽん屋の定休日は「日曜と、第2土曜」なので、WORKDAY関数が使いづらい。
蛇足2。出落ち。
投稿者 zig5z7 | 返信 (0) | トラックバック (1)