先日知人から「貸出日と返却日をExcelで管理しているんだけど、何ヶ月借りているかを自動で計算できないの?」と相談を受けました。
もちろん出来ます。これには、DATEDIF関数を利用するのが手軽です。
日付間の期間を求めるDATEDIF関数
DATEDIF関数は日付と日付の間の期間を求める関数です。月だけでなく、年や日で調べる事も出来ます。さらに2年5か月10日という結果の場合に、1年未満の月は「5」とか、1年未満の日は「163」、1か月未満の日は「10」といった結果も求められます。
=DATEDIF(日付1,日付2,”求める期間“)
y:年
m:月
d:日
ym:1年未満の月
yd:1年未満の日
md:1ヶ月未満の日
A2セルとB2セルに日付を入れ、求める期間をそれぞれ変更した結果は次のようになります。
今回の例では、何ヶ月か調べたいので「m」にします。借りた当日に返却しても1か月とみなすので、結果にプラス1して、
=DATEDIF(A2,B2,”m”)+1
にすれば目的の期間を求められます。
C3セルにこの数式を入れ、下方向にオートフィルした結果が次の通りです。
DATEDIF関数の注意点
今回の例では、これで問題ありませんが、DATEDIF関数でmdやydなどを使おうとすると、異なる結果になる事があるので注意が必要です。特に最初の日付が月末になったり、うるう年を挟むと正常に処理出来ない事があります。
たとえば、次の例では、mdの結果がマイナスになっています。
Excelのバージョンによっても変わったりするので、複数のバージョンが混在した環境で利用する場合は、求めたい値になっているか、事前にチェックしておいたほうが良いでしょう。
DATEDIF関数を使わない方法
今回のケースはDATEDIF関数で問題ありませんが、DATEDIF関数を使わない方法も紹介しておきます。指定したセルの年や月を返す関数として、YEAR関数やMONTH関数があるので、これを利用します。
今回の例なら、B2セルからA2セルを年と月をそれぞれ引けばよいので、
=(YEAR(B2)-YEAR(A2))*12+MONTH(B2)-MONTH(A2)
となり、当日や当月も1ヶ月目とみなすなら、
=(YEAR(B2)-YEAR(A2))*12+MONTH(B2)-MONTH(A2)+1
となります。
ただこれだけだと、返却日の日付が、貸出日の日付よりも小さい時に、1ヶ月余分に加算されてしまうので、返却日の日付が、貸出日の日付と同じかそれよりも大きい時のみ1を加算するようにします。条件分岐させるIF関数と、日付を返すDAY関数を利用して、日数によって調整します。
=(YEAR(B2)-YEAR(A2))*12+MONTH(B2)-MONTH(A2)+IF(DAY(A2)<=DAY(B2),1,0)
それぞれの結果は、次のようになります。
DATEIF関数を使った左側の結果や、IF関数で調整した右側の結果では、うるう年を挟んだ場合でも正しく計算出来ています。