プロが教える店舗&オフィスのセキュリティ対策術

Access初心者です。

クエリを使用し、入社年月(yyyymm)から現在までの勤務年月を●年●ヶ月という形で算出したいと思っております。
たくさん同類のご回答を参考にしてみたのですが、日にちを含むものが多く、自信がありません。

例えば、現在-201311とし、
入社年月 201211 ですと、1年1ヶ月
       201212 ですと、1年
       201301 ですと、11ヶ月   というように、出力させたいと思います。

また、1年0ヶ月、0年11ヶ月という時に、’0’は出力させたくありません。

たくさん同じようなご質問がある中、申し訳ありませんが、至急ご回答いただけるとありがたいです。
よろしくお願い致します。

A 回答 (2件)

モジュールを宣言して、vbaのDateDiff関数を呼び出す自作関数を定義。


差を"M"で取得して、12で除算・剰余を求めて文字列化する

参考URL:http://office.microsoft.com/ja-jp/access-help/HA …

この回答への補足

'0'を表示しないという点も含めて、クエリでフィールドを作る事を考えているのですが、難しいですか?

補足日時:2013/11/07 22:23
    • good
    • 0
この回答へのお礼

早速ご回答ありがあとうございます。
VBA・・・難しそうですが、参考URLを見て勉強したいと思います。

お礼日時:2013/11/07 22:23

こんなユーザー定義関数を作っておけば?


クエリに直接も出来なくはないだろうけど、長ったらしくなるので割愛
手順
下記コードの、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
    • good
    • 0
この回答へのお礼

お返事遅くなり申し訳ありません!!!
ご回答、どうもありがとうございました。
初心者ですが、詳しく回答いただいたおかげで、
コピぺでできるなんて、とってもたすかります。
まだ、週明け早々、会社で使用させていただきます!

お礼日時:2013/11/10 10:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!