2017-05-26 15 views
0

数学もコーディングも私のものではありません。だから私は本当に誰かが私を助けてくれることを願っています。私はこの問題について徹底的に困惑しています...MS Access:第14週の日曜日の日付として値を設定してください

シナリオ:クライアントが13週間の雇用に達した後、私たちは数ヶ月の保持を開始します。したがって、WeeksTotalが13に達した後、次の日曜日は保持の最初の月が始まります。

  1. RetentionStartdate値として設定されるべきである。一言で言えばそう

    ...

    WeeksTotalが< 13である:WeeksTotal> = 13の場合 MonthsCurrentJob 0

    に等しくなければなりません第14週の日曜日の日付

  2. 月MonthCurrentJobは、RetentionSta日付

  3. 1に数ヶ月を計算するrtdateはMonthsCurrentJob

かなり可能性(そしておそらく)これの値に追加する必要があり、これを行うについて行くの完全に間違った方法です。しかし、私はこれが私が達成しようとしていることを説明することを願っています。誰かが正しい方向に私を指すことができる場合、私はあなたの名誉の中でヤギを犠牲にします。さて、そうではないかもしれない...しかし、あなたは私の永遠の感謝と賞賛を受けるでしょう!

答えて

0

私はあなたがこのように計算することができると思います:

RetentionStartdate = DateAdd("ww", 14, DateAdd("d", vbSaturday - Weekday(HireDate), HireDate)) 

その時から、あなたはフルヶ月を数えることができます。

RetentionMonths = Months(RetentionStartDate, Date) 

このような関数使用:今

Public Function Months(_ 
    ByVal datDate1 As Date, _ 
    ByVal datDate2 As Date, _ 
    Optional ByVal booLinear As Boolean) _ 
    As Integer 

' Returns the difference in full months between datDate1 and datDate2. 
' 
' Calculates correctly for: 
' negative differences 
' leap years 
' dates of 29. February 
' date/time values with embedded time values 
' negative date/time values (prior to 1899-12-29) 
' 
' Optionally returns negative counts rounded down to provide a 
' linear sequence of month counts. 
' For a given datDate1, if datDate2 is decreased stepwise one month from 
' returning a positive count to returning a negative count, one or two 
' occurrences of count zero will be returned. 
' If booLinear is False, the sequence will be: 
' 3, 2, 1, 0, 0, -1, -2 
' If booLinear is True, the sequence will be: 
' 3, 2, 1, 0, -1, -2, -3 
' 
' If booLinear is False, reversing datDate1 and datDate2 will return 
' results of same absolute Value, only the sign will change. 
' This behaviour mimics that of Fix(). 
' If booLinear is True, reversing datDate1 and datDate2 will return 
' results where the negative count is offset by -1. 
' This behaviour mimics that of Int(). 

' DateAdd() is used for check for month end of February as it correctly 
' returns Feb. 28. when adding a count of months to dates of Feb. 29. 
' when the resulting year is a common year. 
' 
' 2010-03-30. Cactus Data ApS, CPH. 

    Dim intDiff As Integer 
    Dim intSign As Integer 
    Dim intMonths As Integer 

    ' Find difference in calendar months. 
    intMonths = DateDiff("m", datDate1, datDate2) 
    ' For positive resp. negative intervals, check if the second date 
    ' falls before, on, or after the crossing date for a 1 month period 
    ' while at the same time correcting for February 29. of leap years. 
    If DateDiff("d", datDate1, datDate2) > 0 Then 
    intSign = Sgn(DateDiff("d", DateAdd("m", intMonths, datDate1), datDate2)) 
    intDiff = Abs(intSign < 0) 
    Else 
    intSign = Sgn(DateDiff("d", DateAdd("m", -intMonths, datDate2), datDate1)) 
    If intSign <> 0 Then 
     ' Offset negative count of months to continuous sequence if requested. 
     intDiff = Abs(booLinear) 
    End If 
    intDiff = intDiff - Abs(intSign < 0) 
    End If 

    ' Return count of months as count of full 1 month periods. 
    Months = intMonths - intDiff 

End Function 

をクエリで使用するには、ヘルパー関数を作成します。

Public Function RetentionMonths(ByVal HireDate As Date) As Integer 

    Dim RetentionStartdate As Date 

    RetentionStartdate = DateAdd("ww", 14, DateAdd("d", vbSaturday - Weekday(HireDate), HireDate)) 

    RetentionMonths = Months(RetentionStartDate, Date) 

End Function 

保存し、コードモジュールでこの機能、およびクエリは次のようになります。

Select *, RetentionMonths([HireDate]) As RetentionMonths 
From YourTable 
+0

グスタフは、あなたの応答をありがとうございました!残念ながら、私には明らかにうまくいかないことがあります。私はVBAの中で?Months(date1、date2)を使って関数を実行しようとしていますが、入力した日付にかかわらず、常に0を返します。私はそれを使いこなし続けています。私が作っている愚かなエラー。 :) – Zuzu

+0

date1とdate2が正しい日付値であることを確認してください。 – Gustav

+0

ありがとう、それは間違いなく問題でした:)私はあなたの何かを尋ねることは嫌いですが、最初の2行のコードをどこに置くべきか明確にすることはできますか? VBAコードでは "ww"が好きではありません。フォームに置くと "#Name"と表示されます。表現としては、構文エラーが含まれていると言っています...あなたを気にしてすみません、私はまだ基​​本を学んでいます。私は本当に深く、私の絶望的な初心者の自己を助けるあなたの時間に感謝します! – Zuzu

関連する問題