契約の自動更新と解約通知の締切。開始日から次の更新日を式で出す

2026-09-21仕事の型

自動更新の契約は、解約通知の締切を過ぎると1年延びる。締切は更新日の1か月前から3か月前あたりに設定されていることが多い。

台帳に更新日を書いておくやり方だと、1回目の更新で古くなる。開始日と契約期間から計算する形にすれば、毎年直さなくて済む。20件で試したら、すでに締切を過ぎているものが4件あった。

契約の開始日から経過月数を出し、契約期間で割って更新の回数を求め、次の更新日と通知の締切を計算する

以下の計算は、2026年9月21日にMicrosoft 365のExcel(バージョン16)で行った。祝日は内閣府の一覧を使った。契約の条件は式を確かめるために作った架空のものだ。契約の解釈そのものは扱っていない。

更新日を書くと、1回目の更新で古くなる

契約台帳によくある形が、契約名、相手先、開始日、終了日、更新日の列だ。終了日と更新日に日付が入っている。

この形の弱点は、更新したあとに誰かが書き換えないといけないことにある。2021年に始まった1年契約なら、2022年、2023年、2024年と毎年書き換える必要がある。

書き換えが止まると、台帳の日付が過去のまま残る。過去の日付は期限の抽出に引っかからないので、そのまま忘れられる。実際、更新漏れはここで起きる。

開始日と契約期間だけを持って、更新日は式で出す。そうすれば書き換えが要らない。

次の更新日を出す

考え方は単純だ。開始日から今日まで何か月たったかを出し、それを契約期間で割れば、何回更新したかが分かる。次はその1回先になる。

経過した月数: =DATEDIF(開始日,TODAY(),"m")
更新の回数:   =INT(経過した月数/契約期間)+1
次の更新日:   =EDATE(開始日,契約期間*更新の回数)

DATEDIFは2つの日付の間の月数を返す。INTで切り捨てて、1を足せば次の回になる。

2021年5月10日に始まった12か月契約なら、2026年9月21日の時点で経過は64か月。12で割って切り捨てると5、1を足して6回目。開始日から72か月後の2027年5月10日が次の更新日になる。

契約期間が24か月の契約も同じ式で出る。2020年2月15日開始の24か月契約なら、次は2028年2月15日だ。EDATEが月単位で動くので、期間の長さを変えても式は変わらない。

通知の締切は、更新日から予告期間を引く

解約を申し入れる期限は、更新日から予告の期間だけ前になる。

通知の締切: =EDATE(次の更新日,-予告の月数)

3か月前の予告なら-3を渡す。2026年11月25日が更新日で予告が3か月なら、2026年8月25日が締切だ。

締切が土日祝に当たったら前倒しにする。締切当日が休みだと出せないからだ。

実際の締切: =WORKDAY(通知の締切+1,-1,祝日!$A:$A)

税金の納付は休み明けに延びるが、契約の通知は前に詰める。方向が逆なので、同じ表で管理するときは列を分ける。納付の側の扱いは支払予定表の記事に書いた。

祝日で3日前倒しになった契約があった

20件のうち7件が、営業日の調整で締切が動いた。35%だ。

いちばん大きく動いたのが、2026年7月20日が締切になる契約だった。この日は海の日で祝日だ。前営業日は7月17日の金曜になる。3日前倒しだ。

暦の上の締切だけを見ていると、7月20日の朝に気づいても間に合わない。土日と祝日が続くと、3日や4日の差が出る。祝日の一覧を表に持たせる作り方は祝日を判定する記事に書いた。

20件のうち4件が過ぎていた

締切までの日数で状態を分けた。

=IF(あと何日<0,"過ぎている",
 IF(あと何日<=30,"今月中",
 IF(あと何日<=90,"3か月以内","先")))

20件の契約のうち、締切を過ぎているものが4件、今月中が3件、3か月以内が4件、先が9件

締切を過ぎているのが4件、今月中が3件、3か月以内が4件、先が9件だった。

過ぎている4件は、次の更新がもう確定している。27日過ぎているもの、66日過ぎているものがあった。この期の解約はできないので、次の更新日の締切をカレンダーに入れ直す。

見るのは今月中の3件と、3か月以内の4件だけになる。20件を毎月眺めるのではなく、この7件を見る。

=COUNTIF($状態の列,"今月中")

月次の作業に組み込む形は月次の締めの記事と同じで、第何営業日に見るかを決めておく。

年額の列を足すと、見直す順番が決まる

期限の管理だけなら日付の列で足りるが、年額を1列足すと使い道が増える。

20件に年額を入れて合計したら14,706,000円になった。上位5件だけで9,840,000円、全体の66.9%を占める。年額10万円未満の契約が4件あった。

上位5件の合計: =SUMPRODUCT(LARGE($年額,ROW(INDIRECT("1:5"))))
占める割合:    =ROUND(上位5件/合計*100,1)

契約の見直しは、件数ではなく金額の順にやる。10万円未満の4件を全部やめても、年に30万円ほどしか変わらない。上位5件のうち1つを見直すほうが効く。

状態と組み合わせると、もっと絞れる。

=SUMIF($状態の列,"今月中",$年額の列)

今月中に締切が来る契約の年額は1,584,000円だった。この金額を先に出しておくと、判断を急ぐ理由が数字で説明できる。

締切を過ぎている4件の年額は2,232,000円ある。この期は動かせないので、次の更新日の締切をカレンダーに入れる。1年後に同じことが起きないようにする。

締切の90日前に一度見て、30日前に動く

日付が出たら、動く日を2つ決める。

90日前に、この契約を続けるかどうかの判断を始める。相見積もりを取るなら、ここから動かないと間に合わない。

30日前に、判断を確定させて通知を出す。書面で出す契約なら、社内の決裁と郵送の日数が要る。

判断を始める日: =実際の締切-90
通知を出す日:   =実際の締切-30

この2つの列を作って、それぞれ今日と比べる。今日がどちらかの日を過ぎていて、まだ動いていない契約が残っていないかを見る。

30日前という数字は、社内の決裁にかかる日数で決める。決裁が2週間かかる職場なら、45日前にする。自分の職場の実績から決める。

台帳に持つ列

入力するのは5つだけにする。契約名、相手先、開始日、契約期間の月数、予告の月数。

残りは全部式で出る。経過した月数、更新の回数、次の更新日、通知の締切、実際の締切、締切までの日数、状態。

契約書のファイルの場所を入れる列も足しておくと、締切が近づいたときにすぐ開ける。パスを文字で書くだけでいい。

自動更新でない契約も同じ表に入れる。契約期間の列に期間を入れて、予告の列を空にしておけば、締切は出ないが終了日は出る。終了日を過ぎたら契約がなくなることが分かる。

契約期間が「1年」ではなく「2027年3月31日まで」のように日付で決まっている契約は、この式では扱えない。開始日と期間の形に直せないので、別の列に終了日を直接書く。

踏んだ失敗

台帳の更新日を毎年書き換える運用をしていた。担当が変わった年に止まり、3つの契約が古い日付のまま残った。そのうち1つは、気づいたときには締切の2週間後だった。もう1年払うことになった。

予告の期間を契約ごとに確かめていなかったこともある。全部3か月だと思い込んで一覧を作った。実際には1か月の契約と6か月の契約が混ざっていた。6か月の契約の締切を3か月前と計算していたので、3か月遅れる。契約書を1通ずつ開いて、予告の月数を拾い直した。

営業日の調整を入れていなかった年もある。締切当日に郵送で出そうとして、その日が祝日だった。内容証明で出す契約だったので、郵便局が開いていないと出せない。

契約の開始日を、署名した日で入れていたこともある。契約書に書かれている契約期間の開始日と違っていた。更新日が1か月ずれて、締切もずれた。台帳には契約書の条項に書かれた日付を入れる。

確認していないこと

解約の意思表示をどの方法で出すべきかは扱っていない。書面か、内容証明か、メールでよいかは契約書の条項による。

締切が休日に当たったときに前倒しでよいかも、契約によって変わる。上の式は前営業日で計算しているが、条項に到達主義と書かれているなら、相手に届く日で数える必要がある。

自動更新の条項が無効になる場合があるという話も聞くが、条件は確認していない。争いになりそうなら弁護士に相談する。

契約期間の途中で解約できる中途解約の条項も扱っていない。上の式が出すのは、更新のタイミングでの解約の締切だけだ。

契約書自動更新期限管理Excel仕事の型