計算と条件 6 / 8
日数・期間の計算
休暇の日数、納期、有効期限、年齢などを式で計算する方法を説明します。日付の引き算と足し算、月末の扱い、土日や祝日を選べなくする設定、営業日の判定の注意点を紹介します。
約4分で読めます
Formia マニュアルの目次(章と記事の一覧)
アプリをつくる
入力項目ガイド
休暇申請の日数、見積の有効期限、点検の次回予定日など、日付の計算はよく使います。この記事では、日付を使った式の書きかたと、土日や祝日の扱いを説明します。
日付の引き算と足し算
| やりたいこと | 式の例 |
|---|---|
| 2つの日付の間の日数 | =DIFF_DAYS(end_date, start_date) |
| 日数を足す | =ADD_DAYS(order_date, 30) |
| 月数を足す | =ADD_MONTHS(order_date, 1) |
| 年を足す | =ADD_YEARS(start_date, 1) |
| 今日 | =TODAY() |
| 今日から14日後 | =TODAY() + DAYS(14) |
| 月初・月末 | =START_OF_MONTH(d) =END_OF_MONTH(d) |
| 満年齢 | =AGE(birthday) |
| 曜日(0が日曜) | =WEEKDAY(d) |
DIFF_DAYS(A, B)は「A - B」の日数です。Aのほうが後なら正の数、前なら負の数になります。
ADD_MONTHSは、月末を溢れさせずに月末へ寄せます。たとえば1月31日に1か月を足すと、2月28日(うるう年なら29日)になります。
例: 休暇の日数
休暇申請アプリでは、開始日と終了日から日数を自動で出しています。半日の休暇は0.5日、それ以外は「終了日 - 開始日 + 1」です。
=IF(kind == '半日有給(午前)' || kind == '半日有給(午後)', 0.5,
DIFF_DAYS(end_date, start_date) + 1)
「+ 1」を忘れると、1日だけの休暇が0日になります。「開始日も数える」ときは、足す1を忘れないようにしてください。

選べる日をあらかじめ絞る
日付が正しく入るかどうかは、式の計算より前に、日付の項目の設定で防げます。日付の項目の設定には、次のものがあります。
- 選べる範囲: 「今日以降」など、選べる日の範囲を決める
- 選べない曜日: 土日などを選べなくする
- 祝日を選べなくする: 日本の祝日(振替休日・国民の休日を含む)を選べなくする
休暇申請アプリは、開始日で祝日を選べず、終了日は開始日より前を選べないように設定しています。
営業日の判定
IS_BUSINESS_DAY(日付)は、その日が営業日なら真を返します。この関数はサーバーだけで評価するので、表示条件には使えません。計算式や入力チェックでは使えます。
=IS_BUSINESS_DAY(delivery_date)