保守契約が5件、10件と増えてくると、「あの会社の契約、いつ更新だったか」「今月はもう請求したか」「今月の修正依頼、上限の2時間を超えていないか」を、契約書のPDFと請求書のフォルダとチャットの履歴を行き来して確かめることになります。1件ずつは小さな金額でも、更新の時期を逃して金額を見直せないまま1年が過ぎたり、1ヶ月分の請求を出し忘れたりすると、ストック収入のはずの保守が静かに目減りしていきます。

保守契約の管理表とは、月額で結んでいる保守・運用契約を1契約1行で並べ、月額・契約期間・更新日・作業時間の上限・その月の請求状況を一覧で見られるようにした台帳です。結論を先に書きます。手で入れるのは契約書に書いてある条件(開始日・期間・月額・解約予告・作業上限)だけにして、次回更新日と解約連絡の期限、今月の残り時間、今月の請求の有無は数式で出してください。更新日を手で書いておく運用は、1回目の更新のあとに書き換え忘れて止まります。

この記事では、Googleスプレッドシートでそのまま作れる17列の設計と、更新日を自動で進める数式、作業ログと請求台帳から数字を集める数式、条件付き書式、月額ストックの12ヶ月見込みを出す集計シートまでを書きます。保守契約そのものの範囲や金額の決め方は受託の保守・運用契約の作り方にまとめているので、この記事は「結んだ契約をどう管理するか」の作り方です。

この記事の要点

  • 保守契約の管理表は1契約1行。手で入れるのは開始日・初回期間・更新単位・解約予告・月額・作業上限など契約書の条件だけにする
  • 次回更新日は EDATE と DATEDIF で自動で進め、解約連絡の期限はそこから逆算する。期限の60日前から色を付けて、金額見直しの提案を間に合わせる
  • 作業時間の残りは作業ログから、今月の請求の有無は請求台帳から数式で拾い、契約中の月額の合計を12ヶ月先まで並べる
保守契約の管理表の構成を示した図。手で入れる「保守契約」「作業ログ」「請求台帳」の3枚から、数式で「次回更新日(連絡期限も自動で出る)」「今月の残り時間(上限−使った時間)」「請求漏れ(今月の請求の有無)」が出ることと、契約中の月額の合計が毎月のストック収入になることが確認できる

保守契約の管理表に置く17列

シート名を「保守契約」にして、1行目を見出しにします。左から、契約の基本・期間・作業時間・請求・見直しの順に並べます。

列見出し入力例種類
A顧客名○○株式会社手入力(請求台帳の取引先と同じ表記)
B対象コーポレートサイト手入力
Cプラン更新+修正プルダウン(監視・更新/更新+修正)
D月額(税抜)30,000手入力
E開始日2026/5/1手入力
F初回期間(月)6手入力
G更新単位(月)12手入力
H解約予告(月)1手入力
I状態契約中プルダウン(契約中/解約予定/終了)
J次回更新日2026/11/1数式
K解約連絡の期限2026/10/1数式
L月の作業上限(時間)2手入力
M今月の使用時間1.5数式
N今月の残り時間0.5数式
O今月の請求未数式
P金額見直し日2026/5/1手入力
Qメモ更新時に上限3時間へ変更を提案手入力

E〜H列は契約書の条件をそのまま写す列です。「初回6ヶ月、以降は1年ごとの自動更新、解約は1ヶ月前までに申し出」という契約なら、F列に6、G列に12、H列に1を入れます。初回と2回目以降で期間が違う契約は珍しくないので、列を分けておきます。開始日は、請求の区切りとそろえるために月の1日にしておくと、あとの集計が素直になります。

A列の顧客名は、請求台帳の取引先とまったく同じ表記にします。後で出てくる COUNTIFS は文字列の完全一致で数えるので、「○○株式会社」と「○○(株)」が混ざると、請求したのに「未」と表示されます。顧客ごとの基本情報は顧客管理表をスプレッドシートで作るの顧客シートに置き、こちらはそこからプルダウンで選ぶ形にすると表記が揺れません。

I列の状態は3値だけにします。解約の申し出を受けたら「解約予定」に変え、契約が終わった月を過ぎたら「終了」にします。行は消さずに残しておくと、過去にどの顧客とどんな保守を結んでいたかの記録になります。J〜K列とM〜O列は触らない列なので、背景を薄いグレーにしておくと手入力の列と区別がつきます。

次回更新日と解約連絡の期限を数式で出す

保守契約の管理表でいちばん大事なのが、J列の次回更新日です。2行目に次の式を入れ、下までコピーします。

=IF(OR(E2="",I2="終了"),"",IF(TODAY()<EDATE(E2,F2),EDATE(E2,F2),EDATE(E2,F2+G2*(INT(DATEDIF(EDATE(E2,F2),TODAY(),"M")/G2)+1))))

やっていることは2段階です。まず EDATE(E2,F2) で、開始日から初回期間がたった日(最初の更新日)を出します。今日がそれより前なら、それが次回更新日です。最初の更新日を過ぎていたら、そこから今日までに何ヶ月たったかを DATEDIF の "M" で数え、更新単位(G列)で割って、まだ来ていない次の更新日まで進めます。

EDATE は起算日から指定した月数だけ前または後ろの日付を返す関数です(出典:Google ドキュメント エディタ ヘルプ「EDATE」、2026年10月3日確認)。DATEDIF は単位に "M" を指定すると、開始日と終了日の間の月数を返します(出典:Google ドキュメント エディタ ヘルプ「DATEDIF」、2026年10月3日確認)。エクセルにも同じ名前で DATEDIF がありますが、Microsoft は古いブックとの互換のための関数で、特定の条件では誤った結果を返すことがあると案内しています(出典:Microsoft サポート「DATEDIF 関数」、2026年10月3日確認)。この式で使っているのは月数を数える "M" だけですが、エクセルで使う場合は、作ったあとに1〜2件の契約で更新日を手計算と見比べておくと安心です。

具体的に、2026年5月1日開始・初回6ヶ月・以降12ヶ月更新の契約で確かめます。

  1. 最初の更新日は EDATE で2026年11月1日。今日(2026年10月3日)はそれより前なので、J列は2026年11月1日になる
  2. 2026年11月1日を過ぎると、DATEDIF の月数が0〜11の間は INT(月数÷12)+1 が1になり、J列は2027年11月1日に進む
  3. 2027年11月1日を過ぎると同じ計算で2028年11月1日に進む。更新のたびに手で書き換える必要はない

ここでの「更新日」は、新しい契約期間が始まる日です。5月1日から6ヶ月の契約なら、10月31日で期間が満了し、11月1日から次の期間が始まります。状態を「解約予定」にした契約では、J列はそのまま契約が終わる日(最後の期間の翌日)として読みます。

K列の解約連絡の期限は、次回更新日から解約予告の月数だけさかのぼります。

=IF(J2="","",EDATE(J2,-H2))

上の例なら2026年10月1日です。この日を過ぎると、契約書の条件では今期の解約も条件の変更も難しくなります。こちらから金額や作業上限の見直しを提案したい場合も、この期限より前に話を持ち出すのが筋です。

作業ログから今月の残り時間を集める

「月2時間まで」のような作業上限をつけた保守では、使った時間を数えていないと超過分を請求できません。別シート「作業ログ」を作り、1回の作業を1行で記録します。

列見出し入力例
A日付2026/10/2
B顧客名○○株式会社(保守契約のA列からプルダウン)
C作業内容トップのお知らせ差し替え
D時間0.5
E区分保守内(プルダウン:保守内/別途見積もり)

E列を分けるのは、新規ページの追加のような保守の範囲外の作業まで上限から引かないためです。範囲外の作業も記録だけは同じシートに残しておくと、月次の報告と、別途の見積もりの根拠に使えます。作業時間の記録の付け方そのものはスプレッドシートで工数管理表を作るが参考になります。

保守契約シートのM列とN列に、次の式を入れます。

列数式意味
M 今月の使用時間=IF(A2="","",SUMIFS(作業ログ!D:D,作業ログ!B:B,A2,作業ログ!E:E,"保守内",作業ログ!A:A,">="&EOMONTH(TODAY(),-1)+1,作業ログ!A:A,"<="&EOMONTH(TODAY(),0)))今月の1日から月末までの、保守内の作業時間の合計
N 今月の残り時間=IF(OR(A2="",L2=""),"",L2-M2)上限から使った時間を引いた残り。マイナスなら超過

EOMONTH(TODAY(),-1)+1 は今月の1日、EOMONTH(TODAY(),0) は今月の末日です。月が替われば自動で集計の範囲も替わるので、毎月式を直す必要はありません。N列の数字は、そのまま月次報告の「依頼対応の使用時間と残り時間」に書き写せます。

請求台帳から今月の請求漏れを拾う

保守の請求漏れは、単発の案件より起きやすい漏れです。納品という区切りがないので、「今月の分を出したか」を思い出すきっかけがありません。ここでは請求管理のスプレッドシートテンプレートの請求台帳(B列=取引先、C列=案件名、F列=請求日)を使っている前提で、O列に次の式を入れます。

=IF(OR(A2="",I2="終了"),"",IF(COUNTIFS(請求台帳!B:B,A2,請求台帳!C:C,"保守*",請求台帳!F:F,">="&EOMONTH(TODAY(),-1)+1,請求台帳!F:F,"<="&EOMONTH(TODAY(),0))>0,"済","未"))

請求台帳のうち、取引先が一致し、案件名が「保守」で始まり、請求日が今月の行が1件でもあれば「済」、なければ「未」を返します。条件の「保守*」の * は、0文字以上の任意の文字列にあてはまるワイルドカードです(出典:Google ドキュメント エディタ ヘルプ「COUNTIF」、2026年10月3日確認)。そのため、請求台帳に保守の請求を書くときは、案件名を「保守 2026年10月分」のように必ず「保守」から始める決まりにします。

当月分を前月末に請求する前払いの契約では、請求日が1ヶ月前にずれます。その場合は式の EOMONTH(TODAY(),-1)+1 を EOMONTH(TODAY(),-2)+1 に、EOMONTH(TODAY(),0) を EOMONTH(TODAY(),-1) に変えて「先月に出した今月分」を数える形にします。

更新・超過・請求漏れを条件付き書式で浮かせる

範囲 A2:Q に「カスタム数式」で次の4つのルールを入れておきます。

  1. 解約連絡の期限まで60日以内:=AND($I2="契約中",$K2<>"",$K2-TODAY()<=60) で背景を黄色。金額や作業上限を見直したい契約は、黄色になったら作業ログの実績を見て提案の準備に入ります
  2. 作業上限の超過:=AND($N2<>"",$N2<0) で背景をオレンジ。超過分は別途の見積もりとして顧客に知らせ、作業ログのE列を「別途見積もり」に付け替えるかを決めます
  3. 月末が近いのに請求が「未」:=AND($O2="未",TODAY()>=EOMONTH(TODAY(),0)-5) で背景を赤。月初から赤くすると毎月すべての行が赤くなるので、月末の5日前から色を付けます
  4. 終了した契約:=$I2="終了" で文字をグレー

1の黄色が付いた契約は、受託の保守・運用契約の作り方で書いた「年に1回、工数の実績を見て金額を見直す」のタイミングでもあります。P列の金額見直し日が1年以上前で、作業ログの使用時間が毎月上限に張り付いているなら、更新の前に上限か月額を変える提案をします。

月額ストックの12ヶ月見込みを集計シートで出す

3枚目に「集計」シートを作り、契約全体の数字を出します。

セル見出し数式
B1契約中の件数=COUNTIF(保守契約!I:I,"契約中")
B2契約中の月額合計(税抜)=SUMIFS(保守契約!D:D,保守契約!I:I,"契約中")
B3解約予定の月額合計=SUMIFS(保守契約!D:D,保守契約!I:I,"解約予定")
B490日以内に解約連絡の期限が来る件数=COUNTIFS(保守契約!I:I,"契約中",保守契約!K:K,">="&TODAY(),保守契約!K:K,"<="&TODAY()+90)
B5今月の請求が未の件数=COUNTIF(保守契約!O:O,"未")
B6作業上限を超えた件数=COUNTIF(保守契約!N:N,"<0")

B2が、新しく営業しなくても毎月入ってくる売上の土台です。その下に、12ヶ月分の見込みを並べます。A9に =EOMONTH(TODAY(),-1)+1(今月の1日)、A10に =EDATE(A9,1) を入れて A20 までコピーし、B9に次の式を入れて B20 までコピーします。

=SUMIFS(保守契約!$D:$D,保守契約!$I:$I,"契約中",保守契約!$E:$E,"<"&EDATE(A9,1))+SUMIFS(保守契約!$D:$D,保守契約!$I:$I,"解約予定",保守契約!$E:$E,"<"&EDATE(A9,1),保守契約!$J:$J,">"&A9)

前半は、契約中の契約を「開始日がその月より前なら毎月続く」として足しています。自動更新の契約は解約の申し出がない限り続く前提です。後半は解約予定の契約を、契約が終わる日(J列)の前の月まで足しています。これで、解約が決まった契約の分だけ見込みが段差になって下がるのが見えます。

この12ヶ月の数字は請求する月の売上です。入金の月に直すには支払サイトの分だけ後ろにずらします。入金予定と外注費などの支払予定を突き合わせる表の作り方はスプレッドシートの資金繰り表の作り方に書いています。

月末と更新前に保守契約の管理表でやること

台帳ができたら、手で動かすのは次の場面だけになります。

  1. 作業のたびに、作業ログへ1行足す。日付・顧客名・内容・時間・区分の5つだけで、1分で済みます
  2. 月末の5日前から、赤くなった行の請求書を出し、請求台帳に「保守 ○月分」で1行足す。O列が「済」に変わります
  3. 同じタイミングで、N列の残り時間と作業ログの内容を月次報告にまとめて顧客へ送る。何もなかった月も「異常なし」と送ります
  4. 黄色になった契約は、作業ログの過去数ヶ月の使用時間を見て、更新の条件を変えるかを決める。変えた場合はD列やL列を直し、P列に見直した日を入れます
  5. 解約の申し出を受けたらI列を「解約予定」に、契約が終わったら「終了」にする

保守を続けている顧客は、追加の案件の相談がいちばん来やすい相手でもあります。月次報告のついでに次の改修の話を拾う考え方はリピート受注を増やす方法にまとめています。

この保守契約の管理表で足りなくなるタイミング

保守契約が数十件までで、作業する人が1〜2人なら、この3枚で十分に回ります。苦しくなるのは、保守と単発の案件、外注先への発注が別々のファイルに分かれていて、同じ顧客の売上と外注費を毎月あちこちから集めるようになったときです。

ここからは自社製品の紹介です。Pipelia では案件ごとの売上と外注費から粗利を自動で計算し、入金予定と支払予定を月次で12ヶ月先まで突き合わせて、回収や支払の遅れを警告します。

Pipeliaの資金繰り画面。入金予定と支払予定が12ヶ月先まで月別に並び、遅延の警告が確認できる

よくある質問

保守契約の管理表は契約書の管理と別に作る必要がありますか?

作っておくのがおすすめです。契約書のPDFは条件を確かめるための原本で、更新日が近づいたことや今月の請求が済んだかは教えてくれません。管理表には契約書の条件のうち開始日・期間・解約予告・月額・作業上限だけを写し、Q列のメモに契約書の保存場所を書いておくと、原本にもすぐたどり着けます。

年払いの保守契約はこの管理表でどう扱えばいいですか?

D列には年額を12で割った月額を入れ、Q列に「年払い・毎年5月に請求」のように請求の時期を書いておく形が扱いやすいです。月額にそろえておけば、集計シートの月額合計と12ヶ月見込みに他の契約と同じ基準で入ります。年払いの契約はO列の請求判定が毎月「未」になるので、その行だけO列の式を消しておきます。

自動更新ではない保守契約にも使えますか?

使えます。期間満了で終わり、更新のたびに契約を結び直す形なら、G列の更新単位に次の期間の月数を入れておき、J列を「契約の満了日の翌日」として読みます。結び直しの交渉はK列の期限より前に始める必要があるので、H列には交渉に必要な月数(たとえば2)を入れておくと、条件付き書式の黄色がちょうど準備を始める時期に付きます。