- ベストアンサー
現在年月から勤務年月を算出する方法
- Accessを使用して、入社年月から現在までの勤務年月を算出する方法を解説します。具体的には、入社年月と現在の日付を引き算し、その結果を年と月に変換します。計算結果が0年0ヶ月でなければ、結果を表示します。また、結果を表示する際には「年」と「ヶ月」の単位を付けます。
- 入社年月が2012年11月の場合、現在の日付との差を計算します。その結果は1年1ヶ月となります。同様に、入社年月が2012年12月の場合は1年、入社年月が2013年1月の場合は11ヶ月となります。これによって、入社年月から現在までの勤務年月を算出することができます。
- 入社年月から現在までの勤務年月を算出する方法は、Access初心者でも簡単に実装することができます。計算結果が0年0ヶ月でなければ、その結果を出力します。計算結果の表示には、「年」と「ヶ月」という単位を付けることがポイントです。質問文章の例では、入社年月からの勤務年月を算出する際に、日にちを含むものが多くて自信がないとのことですが、日にちの計算は行わずに年月だけを計算することで解決できます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんなユーザー定義関数を作っておけば? クエリに直接も出来なくはないだろうけど、長ったらしくなるので割愛 手順 下記コードの、Function service~ から最後のEnd Function までをコピー Accessに戻って Alt + F11 を押しますと VBE が立ち上がります。 メニューから、挿入 → 標準モジュールを選択。 Option Compare Database Option Explicit ※(ツール→オプションの編集タブの「変数の宣言を強制する」にチェックがある場合のみ) だけが表示された新たなウィンドウが出ますのでそこにペースト メニューのデバッグ→▽△のコンパイルを選択。 エラーが出ないのを確認して、Alt + F11 で VBE から切り替えます。 クエリのデザイングリッドで 氏名|入社年月|勤続年数:serviceLength([入社年月]) とすれば表示されます。 Function serviceLength(ByVal fromDate As Variant) As String On Error GoTo errh '入社月の前月をもって1年とカウントします。数え年式 '201211と201311 → 1年1ヶ月 '201212と201311 → 1年 '入社月の同月で1年とする場合は、myCount = 0 にします 満年齢式 '201211と201311 → 1年 '201212と201311 → 11ヶ月 Dim fD As Date Dim myCount As Integer Dim LY As Integer, LM As Integer myCount = 1 fD = CDate(Format(fromDate, "@@@@/@@/01")) 'DateDiff関数で使えるように変換 LY = (DateDiff("m", fD, Date) + myCount) \ 12 '12 で割った商 If LY <> 0 Then 'ゼロ非表示対策 serviceLength = CStr(LY) & "年" End If LM = (DateDiff("m", fD, Date) + myCount) Mod 12 '12で割った余り If LM <> 0 Then serviceLength = serviceLength & CStr(LM) & "ヶ月" End If Exit Function errh: serviceLength = "計算できません" End Function
その他の回答 (1)
- bin-chan
- ベストアンサー率33% (1403/4213)
モジュールを宣言して、vbaのDateDiff関数を呼び出す自作関数を定義。 差を"M"で取得して、12で除算・剰余を求めて文字列化する
お礼
早速ご回答ありがあとうございます。 VBA・・・難しそうですが、参考URLを見て勉強したいと思います。
補足
'0'を表示しないという点も含めて、クエリでフィールドを作る事を考えているのですが、難しいですか?
お礼
お返事遅くなり申し訳ありません!!! ご回答、どうもありがとうございました。 初心者ですが、詳しく回答いただいたおかげで、 コピぺでできるなんて、とってもたすかります。 まだ、週明け早々、会社で使用させていただきます!