• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESS97で現在の日付から勤続年月数を算出する関数)

ACCESS97で現在の日付から勤続年月数を算出する関数

このQ&Aのポイント
  • ACCESS97で社員名簿を作成中です。現在の日付から年齢を算出する関数はわかりましたが、勤続年数の算出方法がわかりません。
  • 年齢の算出に成功しましたが、入社年月日から勤続年数を算出する方法がわかりません。アドバイスをお願いします。
  • ACCESS97の社員名簿で現在の日付から勤続年月数を算出する関数を探しています。年齢の算出方法はわかりましたが、勤続年数の算出方法について知りたいです。

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

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

これは、DateDiff関数が、月単位で日付を数えている事に起因する問題ですね。 DateDiff('m',#2001/01/31#,#2001/02/01#) のようにすると、1が表示されます。 日付的には1日しか違わないのに、月だけに着目するとひと月異なっていると判断されるんですね。 ってことで、「どの時点でひと月と判断するのか」を決めておく必要が出てきます。 1月29日(月末より前)に入社した人を2月28日(月末)には勤続一ヶ月と判断するべきか、とか、細かい事を考え出すときりがないので、とりあえずこんな感じで決めてみます。 入社年月日の日の部分とと、現在の年月日の日の部分とを比較してみて、現在の日のほうが大きかったら、既にひと月経過したとみなす。 これを#2の式と組み合わせると、以下のようになります。 IIf(Day(Date())>=Day([入社年月日]),DateDiff('m',[入社年月日],Date())\12 & '年' & DateDiff('m',[入社年月日],Date()) Mod 12 & 'ヶ月',(DateDiff('m',[入社年月日],Date())-1)\12 & '年' & (DateDiff('m',[入社年月日],Date())-1) Mod 12 & 'ヶ月') なんか、すごい長い式になっちゃいましたが、これで上記のような仕様を満たしているはずです。

noname#166310
質問者

お礼

ありがとうございます! これぞ求めた結果でした! Accessはよく使うのですが関数は一般的なことしか知らず、自分で応用をきかせようにも発想することもできずにいましたので本当に助かりました。何回も補足になってすみませんでした。

その他の回答 (2)

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

うーん… それなら、 DateDiff('m',[入社年月日],Date()) \ 12 & '年' & DateDiff('m',[入社年月日],Date()) Mod 12 & 'か月' のようにしても駄目でしょうか? これでも駄目なら、 DateDiff('m',[入社年月日],Date()) とだけ、クエリのフィールドの部分に入力してみて、それらしき数字が出るかどうか確認してみてください。(3年2ヶ月なら、38(36+2ヶ月)と表示されるはず。) もしうまくいかなければ、補足してください!

noname#166310
質問者

補足

回答ありがとうございます。 うまくいきました!上の方法でうまくいったんですけど、勤続2週間の社員が勤続0年1ヶ月のように月未満の分も繰り上げられてしまうのですがよい方法はありませんか? たびたびすみませんがご存知でしたらお願いします。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

日付の差異を求める関数は、DateDiffです。 datediff("yyyy",[入社年月日],date) & "年" & datediff("m",[入社年月日],date) mod 12 & "ヶ月" ってな感じで記述すればいいでしょう。 mod 演算子は、割り算の余りを計算します。

noname#166310
質問者

補足

回答ありがとうございます。 教えていただいたとおりやってみたのですがうまく結果が出ません。 入社年月日フィールドのデータは西暦でyy/mm/ddで入力してあるのですが、データのない社員の分は「年ヶ月」という文字だけが返り、データを入力してある社員の分は「#Error」が返ります。

関連するQ&A