エクセルで日付計算。日数・月数の計算方法まとめ(datedif関数不使用)
エクセルで、日数・月数を計算する方法を紹介します。
このページで扱うのは、
- 1日後、1日前、1ヶ月後、1ヶ月前の計算
- ある日とある日の間が何日(あるいは何ヶ月あるか)
という計算方法です。
特に月数は、用途により、いろいろな計算方法があるため、計算方法を数パターン解説しています。
エクセルで日付計算をするための準備
以下の説明では、全ての日付が「シリアル値」で入力されていることを前提としています。
(シリアル値という言葉を初めて聞いたという方はエクセルのシリアル値とは?それを使うメリットは?をご覧ください)
日付がシリアル値で入力されているか確認する方法
日付っぽく表示されているセルに対して、セルの表示形式を「標準」に変えてください。
5桁の数字に変化すれば、シリアル値で日付が入力されています。
逆に、セルの表示形式を「標準」にしても5桁の数字に変化しない場合は、日付はシリアル値で入力されていません。
文字列形式で入力されているので、シリアル値に変換する必要があります。
日付がシリアル値で入力されていない場合
日付が文字列形式で入力されている場合(=シリアル値でない場合)は、次のようにvalue関数でシリアル値に変換をかけてください。
そして、シリアル値が入っているセルを使って以下の計算をしてください。
計算式中で直接日付を入力する場合
計算式中で直接日付を入力する場合には、次のどちらかの方法を使います。
日付形式からシリアル値への変換
例えば「2016/4/25」という日付形式のデータは、value関数を使うとシリアル値に変換できます。
以下のような、日本語で書かれた日付でも、value関数を使うことでシリアル値に変換できます。
- 平成28年4月25日
- 2016年4月25日
※注:日付データの両側をダブルクォーテーション「"」(=「Shift」を押しながら「2」)で囲う必要があります。
年月日からシリアル値への変換
年月日の「数値」がわかっている場合には、date関数を使うと、シリアル値を得ることができます。
例えば、2016、4、25という数字がある場合、次のようにします。
これで、シリアル値に変換できます。
日数を計算する
それでは、具体的な計算方法を説明していきます。
まず、最初に「日数計算」です。
日数の計算は、非常に簡単で足し算、引き算で計算できます。
1日後の日付
1日後の日付は「1を足して」計算します。
1日前の日付
1日前の日付は「1を引いて」計算します。
n日後の日付
n日後の日付は「nを足して」計算します。
例えば、30日後の日付を計算したいのであれば、次のように30を足します。
n日前の日付
n日前の日付は「nを引いて」計算します。
例えば、30日前の日付を計算したいのであれば、次のように30を引きます。
日付間の日数の計算
「日付A」と「日付B」との間が何日あるかを計算するには、
2つの日付の引き算をします。
なお、エクセルのバージョンや書式設定によっては、
日付の足し算・引き算をしたときに、
「1900/1/5」
のように、妙な日付が表示される場合があります。
その場合には、セルの表示形式を「標準」や「数値」に戻すことで、日数を表示させることができます。
変な表示がされた場合には、まずは、セルの書式設定を確認してみてください。
月数を計算する
月数の計算は、月末の日付が月により28日~31日まで変動するため、ややこしいです。
そこで、状況別に計算方法を書いていきます。
日付を無視した月数の計算
日付を無視して、年・月のみを見て、次のような計算をする方法です。
- 2015年4月の1ヵ月後→2015年5月
- 2015年4月の11ヵ月後→2016年3月
- 2015年4月の12ヵ月後→2016年4月
今回は、
実務上よくある何ヵ月後(あるいは何ヶ月前)の月末日付を計算する方法を紹介します。
日付の部分が必要なければ、書式設定で「年・月」のみ表示する設定にしてください。
1ヶ月後の(月末)日付
1ヶ月前の(月末)日付
nヶ月後の(月末)日付
例えば、3ヵ月後であれば、次のように入力します。
nヶ月前の(月末)日付
例えば、3ヵ月前であれば、次のように入力します。
日付間の月数の計算
日にちを無視して「日付A」と「日付B」との間が何ヶ月あるかを計算するには、次のようにします。
暦による月数計算
- 月を1増やして作った日付(応当日)が存在している場合には、その日付
- 月を1増やして作った日付(応当日)が存在していない場合には、その月の月末
を1ヵ月後とする方法です。
元の日付 | 1ヵ月後の日付 | 注 |
---|---|---|
2015/1/1 | 2016/2/1 | |
2015/1/31 | 2016/2/28 | ※2016/2/31は存在しない |
2016/1/1 | 2016/2/1 | |
2016/1/31 | 2016/2/29 | ※2016/2/31は存在しない、かつ2016年はうるう年 |
2016/2/1 | 2016/3/1 | |
2016/2/29 | 2016/3/29 | |
2016/3/1 | 2016/4/1 | |
2016/3/31 | 2016/4/30 | ※2016/4/31は存在しない |
2016/4/1 | 2016/5/1 | |
2016/4/30 | 2016/5/30 |
暦による1ヶ月後の日付
edate関数を使います。
暦による1ヶ月前の日付
edate関数を使って、2つ目の引数を「マイナス」にして入れます。
暦によるnヶ月後の日付
edate関数の2つ目の引数を「n」に置き換えます。
例えば、3ヵ月後の日付を計算したいのであれば、「3」を入れます。
暦によるnヶ月前の日付
edate関数の2つ目の引数を「-n」に置き換えます。
例えば、3ヵ月前の日付を計算したいのであれば、「-3」を入れます。
「暦による」日付間の月数の計算(1ヶ月未満端数切上)
暦で2つの日付間の月数を計算し、1ヶ月未満の端数が出たら切り上げます。
次のように計算できます。
datedif関数には注意
例えば、ある日とある日の間が何日(あるいは何ヶ月)あるかを計算するための関数として、エクセルにはdatedif関数という隠し関数があります。
一見便利そうですが、datedif関数は、以下のような非常に不安定な動きをします。
- バグがある
- バージョンにより挙動が違う
また、月数を計算する場合、状況によって、どのように月数・年数を計算するかが大きく異なります。
そのため、datedif関数が完璧に動作をするとしても(あなたが望む)月数が計算できるとは限りません。
そこで、このページではdatedif関数を使わない計算方法を紹介しました。
まとめ
日数計算については、比較的シンプルです。
でも、月数計算については、用途により様々な計算方法がありえますので、要件を確認しましょう。
また、計算式を入れた結果が、本当に自分の用途に合うのか、確認をする癖を付けましょう。
特に、月末日付や「うるう年」関連の確認をしておかないと、足元をすくわれる可能性が高いのでお気をつけください!