- 締切済み
エクセル関数 月を数える
エクセルでA列に開始日、B列に終了日があります(yyyy.mm.dd) 月をまたいだら月数をカウントできる関数を教えてください MONTHなど使ってみましたがうまくできません 例えばA列に2000/12/31、B列に2000/1/1でも2ヶ月としたいです よろしくおねがいします
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- bunjii
- ベストアンサー率43% (3589/8249)
>例えばA列に2000/12/31、B列に2000/1/1でも2ヶ月としたいです これでは誰が考えても12ヶ月にしかなりません。 2000年1月1日~同年12月31日ですから丸々1年になります。 タイプミスとしてB列が2001/1/1であれば考え方として1日でもその月は1ヶ月として計算すると考えれば良いことになります。 つまり、2000年12月1日~2001年1月31日と見做すような計算式を考えれば良いことになります。 次の式で対応できるはずです。 簡便法では =DATEDIF("1900/1/1",B1,"M")-DATEDIF("1900/1/1",A1,"M")+1 厳密には =DATEDIF(DATE(YEAR(A1),MONTH(A1),0),DATE(YEAR(B1),MONTH(B1),INDEX({31;28;31;30;31;30;31;31;30;31;30;31},MONTH(B1))+1),"M") 但し、INDEX関数の配列の内28は平年2の月の日数なので閏年では誤差を生じます。 また、DATEDIF関数は標準の関数表に載っていませんが =DATEDIF(開始日付,終了日付,指定文字) と言う書式で演算できます。 指定文字は "Y" 年数、 "M" 月数、 "D" 日数です。 月数は "YM" にすると年数に繰り上げた端数が返ります。 日数は "MD" にすると月数に繰り上げた歩数が返ります。
- okormazd
- ベストアンサー率50% (1224/2412)
セルの書式を標準にして、単に、 =MONTH(B1-A1)+1 ではダメなのか?
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答No.1,2様の方法以外にも、次の様な方法が考えられます。 =DATEDIF(TEXT($A1,"yyyy/m")+0,TEXT($B1,"yyyy/m")+0,"M")+1 =(YEAR($B1)-YEAR($A1))*12+MONTH($B1)-MONTH($A1)+1 尚、A列のセルやB列のセルに日付が入力されていない場合において、おかしな結果が表示されたり、エラーとなったりする事を防ぐためには、IF関数と組み合わせて、例えば次の様にされると良いと思います。 =IF(AND(ISNUMBER(1/DAY($A1)/DAY($B1)),$A1<=$B1),DATEDIF(TEXT($A1,"yyyy/m")+0,TEXT($B1,"yyyy/m")+0,"M")+1,"")
- mt2008
- ベストアンサー率52% (885/1701)
失礼! 式が間違っていました 誤:=DATEDIF(A1-DAY(A1),B1-DAY(B1),"M")+1 ↓ 正:=DATEDIF(A1-DAY(A1)+1,B1-DAY(B1)+1,"M")+1 開始日の月初(1日)~終了日の月初の月数を調べてそれに+1しています。
お礼
ありがとうございます! 早速使ってみました 希望通りの結果が出ました 本当にありがとうございました!
- mt2008
- ベストアンサー率52% (885/1701)
例として挙げられている > 例えばA列に2000/12/31、B列に2000/1/1でも2ヶ月としたいです は、 2000/12/31と2001/1/1の間違いでよろしいですか? であれば…… =DATEDIF(A1-DAY(A1),B1-DAY(B1),"M")+1 開始と終了が逆転しているかどうかのチェックや、日付以外が入力されているときの処理などは適当に入れて下さい。
お礼
回答ありがとうございます まずは回答No.1、2さま数式にしましたが、会社に行ったら教えていただいた数式を全部試して勉強しようと思います ありがとうございました!