Q&A

回答の並べ替え:
投稿新規に質問を投稿する

関数を用いて期間の月数を求める

zoe7010 zoe7010

2022-06-28 17:13

お世話になります。

現在、ある期間の月数を求めたいと思っております。
DATEDIF関数が使えればいいのですが、CELFでは使えず、下記のように数式を作成しております。

=(YEAR(A)-YEAR(B))*12)+(MONTH(A)-MONTH(B))
※Aが終了日 Bが開始日-1の値になります。
 Bを開始日-1にしている理由としては、終了日に合わせるためとなります。

開始日が月初だったりする場合、問題ないのですが、
開始日が月末で終了日と同日の30日だった場合に不整合が発生します。
例えば、終了日が2023/9/30で開始日が2023/1/31の場合、
2023/9/30-2023/1/30の計算となり、実際は9ヶ月となりますが、
計算結果が8ヶ月となってしまいます。

なにかいい数式等ありましたら、ご教授いただけますと大変助かります。

zoe7010 zoe7010
Yexiongmao さん

ご回答いただきありがとうございます。
いただいた内容で検証した結果、現状、思い通りの結果を導くことができています。

ありがとうございます。

日本コンピュータシステム(CELFチーム) さん

不足していた情報にも関わらず方法を考えてくださり誠にありがとうございます。
Yexiongmao Yexiongmao
メダルベストアンサー
こんにちは。

いろいろ方法はあると思いますが、
終了日が月末の場合は日付を31にして計算してみました。
調整終了日とDAY()関数の応当日と比較して、調整月数を決めます。
zoe7010 zoe7010
日本コンピュータシステム(CELFチーム)さん
Yexiongmao さん

ありがとうございます。
月数の計算方法について、情報が不足しており、失礼致しました。
いただいた内容ですと、①、②が1ヶ月、③、④が2ヶ月というカウント方法になります。
EDATE関数の1日前(応当日前日)を境目としたいと考えております。

今回、質問させていただいた経緯としては、
現在、保守のシステムを作成しており、ある年数から保守金額が変更になる製品があります。
変更になる日付から保守終了日までの月数を求めて、その月数分の割り増し料金を計算するために月数のカウント方法を検討しております。

基本的には、開始日(変更のタイミング)が1日、終了日が月末になるため問題なかったのですが、
今回記載させていただいた通り、開始日(変更のタイミング)が2023/1/31、終了日が2023/9/30と、どちらも月末になる案件が発生しました。
日割計算を行っていないため、2023/1~2023/9までの9ヶ月となりますが、
先日記載させていただいた方法ですと8ヶ月になってしまっておりました。

今回、下記のように修正したところ、上記の計算は問題なくできておりますが
他のパターンについて、考えられておりません。

=(YEAR(A)-YEAR(B))*12)+(MONTH(A)-MONTH(B)+1)
※開始日を1日に、終了日を28日(2月を考慮)に変換
 Aが終了月の28日、Bが開始月の1日の値になります。
※開始日について以前、開始日-1日として計算しておりましたが、数式の変更に伴い、本来の開始日になります。

こちらの情報で何かわかったりしますでしょうか…?
恐れ入りますが、よろしくお願いいたします。
Yexiongmao Yexiongmao
こんにちは。

この場合月数はどのように数えるのでしょうか?
例えば、開始日が2月28日として、1ケ月は
終了日が①3月1日、②3月27日、③3月28日、④3月31日などが考えられます。
①は月を跨げば1月、②は応当日の前日で1月経過、③応当日で1月(誕生日型)④は月末スタートなので応当日が月末
などです。
日本コンピュータシステム(CELFチーム) 日本コンピュータシステム(CELFチーム) パートナー
こんにちは。

9ヶ月で合っているということ了解しました。
具体的な内容を書き込んでいただければ
回答できることがあるかもしれませんので
何かあれば追記していただければと思います。
メールコンタクトをとる
zoe7010 zoe7010
日本コンピュータシステム(CELFチーム)様

ご回答いただきありがとうございます。
説明が不足しており失礼致しました。
日割計算を行っていないため、9ヶ月が正となります。

いろいろな関数を合わせて使っており、複雑な式になっております。

開始日を1日に、終了日を28日(2月を考慮)に変換してから月数を計算してみようかと思っております。
日本コンピュータシステム(CELFチーム) 日本コンピュータシステム(CELFチーム) パートナー
こんにちは。

計算結果がどのようになるか確かめる為に
実際にDATEDIF関数を実行してみたところ、
下記の計算式の結果は8か月となりました。

・2023/9/30-2023/1/30 → 差月は8か月

ある期間の月数を求めたいということですので
単純に2月から9月までの月数を数えてみても8か月となります。
現在の計算式でも問題なさそうですがいかがでしょうか。
もし的外れな回答でしたらすみません。
メールコンタクトをとる