• ベストアンサー

勤続年数の出し方で詰まっています・・・。

勤続年数を書類作成日から求めるっていう数式で、 DATEDIF関数を使って H3  =書類作成日(yyyy/mm/dd) F27 =入社年月日(yyyy/mm/dd) F28 =勤続年数 (○年 と表示したい) *H3,F27、いずれかが空白の場合はF28は空白表示 if文でネストすると F28=if($H$3="","",if(F27="","",DATEDIF(F27,$H$3,"y")&"年")) でOK・・・なのですが、勤続年数が1年未満だと「0年」と表示されて しまい、じゃあ、「▲ヶ月」で表示・・・と思ったら、 ExcelのヘルプでDATEDIF(F27,$H$3,"ym")では だせないみたいです。 どなたか「▲ヶ月」と表示が出来る方法を教えて 頂けませんか?仕事の書類なので、とりあえずは 「▲ヶ月」の従業員はベタ打ちにしてしまってますが、 1年後にこの書類を開きH3の日付を打ち変えれば 「1年」と表示がなると助かる、という書類なので。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんばんは。 >ExcelのヘルプでDATEDIF(F27,$H$3,"ym")では >だせないみたいです。 ↑の意味がよくわからないのですが‥ F28セルに↓でどうでしょうか? ----------------------------- =IF(OR($H$3="",F27=""),"",IF(DATEDIF(F27,$H$3,"Y")>0,DATEDIF(F27,$H$3,"Y")&"年",DATEDIF(F27,$H$3,"YM")&"ヶ月")) ------------------------------------

tmknok
質問者

お礼

ありがとうございます。F27(入社年月日)がブランク だとしてもこれなら大丈夫ですね。 最初に、DATEDIF(F27,$H$3,"YM")&"ヶ月" を入れてはいたのですが、「1ヶ月」でも「1ヶ月」、 「4ヶ月」でも「1ヶ月」と表示されていたのです。。。 セルの設定が何かいけなかったのかしら?なぞです。 ともあれ、うまくいきましたのでありがとうございます!

その他の回答 (3)

  • narino
  • ベストアンサー率40% (2/5)
回答No.4

私は 簡単に、IF関数で作ってみました。 どうでしょうか。 F28=IF(F27="","",IF((DATEDIF(F27,H3,"y"))>1,DATEDIF(F27,H3,"y")&"年",DATEDIF(F27,H3,"ym")&"ヶ月")) 答えが1年以上ならその年数を、 そうでなければ○ヶ月を表示する、という命令です。 また、usami33さんがおっしゃるように、 その日の時点の年月を知りたい場合は、 h3のところを  ↓ today() 又は now() でもOKですね。

tmknok
質問者

お礼

>F28=IF(F27="","",IF((DATEDIF(F27,H3,"y"))>1,DATEDIF(F27,H3,"y")&"年",DATEDIF(F27,H3,"ym")&"ヶ月")) ですと、 1年5ヶ月→5ヶ月 と表示 0年7ヶ月→7ヶ月 と表示 されてしまいました。 narino様の数式を見つつ、自分で数式を変えてみたら IF(F27="","",IF(DATEDIF(F27,H3,"y")>1,DATEDIF(F27,H3,"y")&"年",DATEDIF(F27,H3,"ym")&"ヶ月")) でうまくいくようです。ありがとうございました。

tmknok
質問者

補足

すみません、 IF(F27="","",IF(DATEDIF(F27,H3,"y")>=1,DATEDIF(F27,H3,"y")&"年",DATEDIF(F27,H3,"ym")&"ヶ月")) でした。

  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.3

tmknokさんの関数にもう一つネストさせた形です。 F28=IF(ISERROR(DATEDIF(E27,$H$3,"y")),"",IF(DATEDIF(F27,$H$3,"y")<1,DATEDIF(F27,$H$3,"m")& "ヶ月",DATEDIF(F27,$H$3,"y")&"年")) F28=if($H$3="","",if(F27="","", の部分はエラー回避だと思うのですが、 ISERROR(DATEDIF(E27,$H$3,"y") を使えば、DATEDIF()関数がエラーかどうか判別してくれます。 エラーのときはTrueがかえります。 これを利用すれば、少し簡単になります。

tmknok
質問者

お礼

ISERROR関数は名前しかしらなかったです。今までずっと if(セル="","",数式)という風に書いてました。 これまた勉強になります。 勤続年数が1年以上なら「○年」表示、1年未満なら「▲ヶ月表示」ばっちりです!ありがとうございました。 ただ、F27(入社年月日)がブランクの場合 数式をコピー していると「105年」という表示になってしまいます。 F27を0と認識してしまっているのでしょうか?

  • usami33
  • ベストアンサー率36% (808/2210)
回答No.2

これでどうですか =TEXT(DATEDIF(F27,H3,"y"),"0年;;""""")&TEXT(DATEDIF(F27,H3,"ym"),"0ヶ月;;""""") それから,もともとのH3に =TODAY() と記載しておくと、開いた日になりますよ

tmknok
質問者

お礼

TEXT関数!目からうろこでした。 "0年;;""""" の部分はEXCELのヘルプでは 見当たらなかったのですが、セル書式のユーザー定義 の書き方と同じ、なんでしょうね。関数もまだまだ 知らない事があるので、勉強になります。 ただ、残念な事に、usami33様の記述だと「○年▲ヶ月」 と表記されてしまうので、今回のケースは「○年」または 1年未満は「▲ヶ月」という表記が良いようです。 ありがとうございました。 >TODAY() これは私もそうしておきたいのですが、提出する先に よって、作成日がまちまちで、関数を消されるなら 各自で入力、の方向でお願いするほうが(施主が記入する ケースもあり提出時はブランクの場合もあるようです) 良さそうなのです。

関連するQ&A