- ベストアンサー
エクセルで経過時間を「X年Xか月」で表示したい
いつもお世話になっております。 エクセルで日付の引き算の結果(経過時間)を「9年5か月」というような表示にしたいのですが。 DATEDIFで満年、端数月、端数日は簡単に求められるようなのですが、X年Yか月Z日というように表示させる簡単な方法は無いのでしょうか?
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
DATEDIF関数で年差・月差を計算できるんですから、&で文字列結合すればいいでしょう。 しかし、DATEDIF関数はその動作の不安定さから、なるべく使わない方が良いと思います。 >★DATEDIF関数のバグについて >https://chiquilin.web.fc2.com/data/100509_datedif.html >DATEDIF関数で期間内の日数を求めるのは”危険” >https://ka-zublog.com/2017/08/08/excel-datedif/ >DATEDIFの謎を追え(1) ~ DATEDIF関数の真実 >http://www.niji.or.jp/home/toru/notes/50.html DATEDIF 関数は、Lotus 1-2-3 ユーザー移行のための隠し関数でしたが、その動作は完全互換ではなくズレがあります。 しかもExcelバージョンや修正パッチのあるなしにより結果が違ってくることもあるという…。 ---- まあそもそも「日付の差分」を「何年何月何日」と数えること自体が、不合理なものです。 (1)2000年1月1日から465日後は→2001/4/10 (2)2000年2月1日から465日後は→2001/5/11 (3)2000年5月1日から465日後は→2001/8/9 (1)は「1年3か月9日後」で、(2)は「1年3か月10日後」で、(3)は「1年3か月8日後」…なのでしょうか? 同じ日数なのに?? でも日数表示だけでは確かにわかりにくいですから、不正確なのは承知の上で、DATEDIF関数を使って「約○年△月」という表示をさせるのはいいかもしれません。 ↓ ="約"&@DATEDIF(開始日セル,終了日セル,"Y")&"年"&@DATEDIF(開始日セル,終了日セル,"YM")&"月"
その他の回答 (7)
- asciiz
- ベストアンサー率70% (6824/9704)
>もっと簡単一発の求め方があるかと。 DATEDIFよりもさらにいいかげんになるかとは思いますが、 計算式「=(終了日セル-開始日セル)/30.4375」 表示書式(ユーザー定義)「0"ヶ月"」 これでおおよその月数表示ができますね。 年数表示まで加えようとするともう一回同じような計算が必要なのと、月数の方にMOD関数まで使う必要が出てきて、DATEDIFより複雑になってしまいます。
お礼
ご回答ありがとうございます。 最初は(日数/365)で少数以下1桁での表示(9.5)を考えたのでご回答の方法も対象でした。
- msMike
- ベストアンサー率20% (364/1805)
セル A1、A2 をそれぞれ開始、終了年月日としたとき、 =DATEDIF(A1,A2,"y")&"年"&DATEDIF(A1,A2,"ym")&"か月"&DATEDIF(A1,A2,"md")&"日" または =INT((A2-A1)/365.25)&"年"&INT(MOD((A2-A1),365.25)/30.4375)&"か月"&INT(MOD(MOD((A2-A1),365.25),30.4375))&"日"
お礼
ご回答ありがとうございます。 ご回答は#No1さんのご回答で、当方もNETで見つけております。 もっと簡単な方法があると思い質問しました。
- HohoPapa
- ベストアンサー率65% (455/693)
ある2つの年月日に何ヵ月の開きがあるのかを求める場合 (既に他の方々から指摘があるように) 考え方次第で変化してしまいます。 例えば、減価償却費を求める場合 「月数は、暦に従って計算し、1カ月未満の端数が生じた ときは、これを1カ月とする」とされ、 更に、 民法と国税通則法では 「月又は年の始めから期間を起算しないときは、その期間は 最後の月又は年においてその起算日に応答する日の前日に 満了する。ただし、最後の月にその応答する日がないときは その月の末日に満了する」 と規定しています。 ぱっと見、何?と思われましょう。 わかりやすく説明するのは面倒なので、 https://www.kh-tax.com/calendar/ を読んでみてください。 この考え方で月数を求め 12か月を1年とすれば、 国の定めたルールで年月を計算できます。 なお、 この考え方を出来合の関数の組み合わせで実現するとなると 面倒になりそうなので 期待されるのであれば、 VBAでサンプル掲示することは可能と思います。
お礼
ご回答ありがとうございます。 当方は単に老朽化機器の投資の優先順位を考慮するのに使用年数を一覧にしたいだけだったのですが法的な考え方まで参考になりました。 経過年数の表記の定義が色々ある(当方の配慮不足)で思っていたほど簡単ではないようなのでこれ以上のお手数は不要です。 日数/365=9.5(年)程度でも用は足りる要求ですので。
- bunjii
- ベストアンサー率43% (3589/8249)
>この要求は色んなケースで必要だと思うので、DETEDIFを使って&で繋ぐ以外に簡単な関数もあるかと思いました。 DATEDIFで算出した値を文字列と連結した方が簡単です。 組み込み関数では他に無いと思いますのでユーザー定義関数を作らないと無理でしょう。
- bunjii
- ベストアンサー率43% (3589/8249)
>エクセルで日付の引き算の結果(経過時間)を「9年5か月」というような表示にしたいのですが。 「0年5か月」や「9年0か月」のときはどうしますか? DATEDIF関数では起算日と終了日が同じのときは0日と判断され、月数は起算日と終了日の日付が同日以降のとき繰り上がります。 つまり、2019/1/8~2019/2/8のとき1か月で、2019/1/9~2019/2/8のときは0か月になります。(2019/2/8~2019/3/8は1か月、2019/2/9~2019/3/8は0か月)
補足
ご回答ありがとうございます。 目的は予算の作成時に、機器リストで=TODAY()と購入日からの機器の経時を見やすく表示させることなので、「5年0か月」でいいのですが、「年単位」や「95か月」とかではなく年月で表記させたいのです。 この要求は色んなケースで必要だと思うので、DETEDIFを使って&で繋ぐ以外に簡単な関数もあるかと思いました。
- yumi0215
- ベストアンサー率30% (1335/4411)
下記のようなやり方もあります。 A1 B1 C1 2010/1/1 2019/2/8 9年1か月 セルC1へ =(YEAR(B1)-YEAR(A1))&"年"&(MONTH(B1)-MONTH(A1))&"か月" これでは面倒でしょうか。
お礼
ご回答ありがとうございます。 この関数があることを忘れていました。 参考になりました。
- tom900
- ベストアンサー率48% (1239/2534)
DATEDIF 関数の式を結合させれば年月を算出出来ますよ。 https://support.office.com/ja-jp/article/2-%E3%81%A4%E3%81%AE%E6%97%A5%E4%BB%98%E9%96%93%E3%81%AE%E5%B7%AE%E5%88%86%E3%82%92%E8%A8%88%E7%AE%97%E3%81%99%E3%82%8B-8235e7c9-b430-44ca-9425-46100a162f38 エクセル系の計算式などは、Googleで検索した方が近道です。 相当色んな計算をさせる方法が見つかります。
お礼
早々のご回答ありがとうございます。 >エクセル系の計算式などは、Googleで検索した方が近道です。 その通りでGoogleで検索してご回答と同じURLでDATEDIF関数を知ったのですがこの関数では式が煩雑なるのと、この関数はお勧めではないというような情報もチラホラあったので、 >簡単な方法は無いのでしょうか? ということで。。。
お礼
早々のご回答ありがとうございます。 ご回答の式はGoogleで調べてDATEDIF関数を使って&でつなぐ回答を見つけたのですが、この関数はあまりお勧めではないこと、分かりやすいが煩雑なのでもっと簡単一発の求め方があるかと。
補足
経過時間の表記に関してご丁寧に説明していただき参考になりました。