某大手ソフトの表計算ソフトを使って万年カレンダーを作る方法を書きます
WORKDAY関数で全て事足りるかもしれませんが、旗日を旗日らしく表示する方法です
一見複雑怪奇なことをしているように見えますが、条件関数や検索関数などで構成されており特殊なものは使っていませんのでじっくり見て行けば解読は可能と思います。
Mac版、Windows版ともに対応しています。
*どなたでも自由にお使いいただいてかまいませんし当方への連絡も不要です。
*フリー版での動作保証はしません。
シート1に基礎データ、シート2に祝祭日データ、シート3に表示部と名前をつける

<基礎データ>
001 A1 → =TODAY()
と入力し今日の日付を取得
002 B1 → =VALUE(TEXT(A1,"yyyy")
と入力し A1 から年の情報のみ取得
003 C1 は何も入れずに四角で囲む
任意の年のカレンダーを表示させるためのセル
004 D1 → =IF(C1="",B1,C1)
として C1 に入力された任意の年がない時は B1 の値を使用
005 A3 → 1
と入力(1月)
006 A4 → =DATEVALUE(CONCATENATE($D$1,"/",A3,"/",1))
を入力しYYYY年1月1日を合成
007 A5 → =TEXT(A4,"AAA")
yyyy年1月1日の曜日をテキストで表示
008 B3〜H3に日月火水木金土と入力 B3〜H9に罫線を引いてセルを囲む
009 B2 → =IF(B3=$A5,1,IF(A2>0,A2+1,0))
と入力し C3〜H2 へコピペする → 1/1の確定と以降の日付を算出
010 B4 → =IF(SUM($B2:B2)=1,$A4,IF(SUM($B2:B2)=0,"",A4))
と入力し B4〜H4 にコピペする
010 5行目〜7行目は前日+1と入力
011 A12 → =A3+1
(2月)
012 A13にはA4 を A14にはA5 をコピペする
013 B8 → =IF(B7+7>=$A13,"",B7+7)
と入力し演算結果が翌月の1日を超える場合は空白で返す
014 C8〜H8、B9〜H9にコピペする
015 B2〜H9 を B11〜H18 にコピペ
016 あとは A11〜H18 を 3月〜12月分までコピペする(各月の間を1行開ける)
017 A111 → 1
018 A112 → =DATEVALUE(CONCATENATE($D$1+1,"/",A111,"/",1)) を入力
これで基礎データは完成
10/26追加 基礎データ内の各月の枠内はセル書式の「表示のユーザ定義」
で d にしておいてください。

<祝祭日データ>
001 A1 → =基礎データ!D1
と入力し基礎データから設定する年にリンクを張る
002 A2〜A13 に 1〜12を入力する
003 B2〜B13 まで 各月の第1土曜日の値にリンクを張る
↑10/26修正 基礎データの黄色いセルの部分にリンクを張る(土の上のセル)
004 D列に 祝祭日名を入力(創立記念日や誕生日など任意の日を入れることも可能)
ハッピーマンデー以外は任意の日を除き必ず1行開けること
005 振替休日用の処理 → =IF(H3="日","振休","")
を1行ずつ入力して行く
006 E列に祝祭日の属する月を入力して行く
007 振替休日用の処理 → =IF(H3="日",A3,"")
008 ハッピーマンデーと春分の日、秋分の日以外は それぞれ 日を入力して行く
009 K1 に 第2月 N1 に 第3月と入力し 2行目以下に 1〜7を入力
010 L2以降に 10、11、12、13、14、8、9 と入力
011 O2以降に 17、18、19、20、21、15、16 と入力 (Lx+7でも可)
012 F3 → =INDIRECT(ADDRESS(MATCH(B2,K1:K8,0),MATCH(I3,A1:O1,0)
+1,,,)) を入力(このままではまだエラーになります)
F14、F15、F18 に F3 をコピペ
013 G1 → =DATEVALUE(CONCATENATE($A$1,"/",E1,"/",F1)) と入力し何も考えずに23行目までコピペ
014 H1 → =TEXT(G1,"AAA") と入力し何も考えずに23行目までコピペ
015 I13とI18 に 第2月 I14とI15 に 第3月 と入力すると ハッピーマンデーの日がエラーから解放されるはずです
016 K10 → 春分の日算出 と入力
017 N10 → =(A1/4-INT(A1/4))*4
と入力し年を4で割った剰余数を求める
018 L列 M列 N列 O列 P列
019 11行目 0 1900 1956 21
P11 → =IF(AND($L$11=$N$10,M11<=$A$1,$A$1<=N11),O11,"")
020 12行目 1966 2088 20 ↑コピペ
021 13行目 2092 2096 19 ↑コピペ
022 14行目 1 1901 1989 21
P14 → =IF(AND($L$14=$N$10,M14<=$A$1,$A$1<=N14),O14,"")
023 15行目 1993 2097 20 ↑コピペ
024 16行目 2 1902 2002 21
P16 → =IF(AND($L$16=$N$10,M16<=$A$1,$A$1<=N16),O16,"")
025 17行目 2026 2098 20 ↑コピペ
026 18行目 3 1903 1923 22
P18 → =IF(AND($L$18=$N$10,M18<=$A$1,$A$1<=N18),O18,"")
027 19行目 1927 2055 21 ↑コピペ
028 20行目 2059 2099 20 ↑コピペ
029 F6 → =MAX(P11:P20) と入力
030 K22 → 秋分の日算出 と入力
031 N10 → =(A1/4-INT(A1/4))*4
と入力し年を4で割った剰余数を求める
032 L列 M列 N列 O列 P列
033 23行目 0 1900 2008 23
P23 → =IF(AND($L$23=$N$10,M23<=$A$1,$A$1<=N23),O23,"")
034 24行目 2012 2096 22 ↑コピペ
035 25行目 1 1901 1917 24
P25 → =IF(AND($L$25=$N$10,M25<=$A$1,$A$1<=N25),O25,"")
036 26行目 1921 2041 23 ↑コピペ
037 27行目 2045 2097 22 ↑コピペ
038 28行目 2 1902 1946 24
P28 → =IF(AND($L$28=$N$10,M28<=$A$1,$A$1<=N28),O28,"")
039 29行目 1950 2074 23 ↑コピペ
040 30行目 2078 2098 22 ↑コピペ
041 31行目 3 1903 1979 24
P31 → =IF(AND($L$31=$N$10,M31<=$A$1,$A$1<=N31),O31,"")
042 32行目 1983 2099 23 ↑コピペ
043 F6 → =MAX(P11:P20) と入力
*K列の剰余は省略可
*上記対比表の出典はWikipedia「春分の日」、「秋分の日」
これで祝祭日のデータ入力は終了
表示部については次の記事にて
いろいろと不具合が出ておりまして修正いたしました。