0

Excel VBAで2つの日付の間の週数を見つけようとしています(間にいくつかの最小/最大機能があります)、次の行でタイプの不一致エラー(実行時エラー '13')が発生していました:

WeeksWorked = Application.WorksheetFunction.RoundDown _ 
             (52 * Application.WorksheetFunction.YearFrac _ 
             (Application.WorksheetFunction.Max(DOH, DateValue("Jan 1, 2012")), _ 
              DateValue("Dec 31, 2012")), 0)

私が間違っていることについては誰でも方向性があります、それは大いにありがたいです!

4

3 に答える 3

1

なぜVBAでこれを使用する必要があるのか​​わからないので、ここで試すことができます。

Excelの場合:

開始日がA1にあり、終了日がA2にあり、次にA3にあると仮定すると、

=(NETWORKINGDAYS(A1,A2))/5

これが営業日の観点から、週5日となります。通常の日で週7日が必要な場合は、

=WEEKNUM(A3)-WEEKNUM(A2)

Analysis Toolpackアドインの関数WEEKNUM()は、米国にいる場合、特定の日付の正しい週番号を計算します。以下のユーザー定義関数は、コンピューターの各国語設定に応じて正しい週番号を計算します。

DateDiffそれでもVBAを使用する必要がある場合は、これを試してください:(ティムがかなり便利だと指摘したように)または、を使用することもできますEvaluate to trigger WEEKNUM

Option Explicit

Function numWeeks(startDate As Date, endDate As Date)
    numWeeks = DateDiff("ww", startDate, endDate)
End Function

WEEKNUMでのEvaluateの使用

Function numWeeks(startDate As Range, endDate As Range)
Dim s As Integer, t As Integer
    s = Application.Evaluate("=WEEKNUM(" & startDate.Address & ",1)")
    t = Application.Evaluate("=WEEKNUM(" & endDate.Address & ",1)")
    numWeeks = t - s
End Function

于 2013-02-27T04:12:25.073 に答える
0

コメントで示唆されているように、あなたはただすることができます:

debug.print DateDiff("ww", DateValue("Jan 1, 2012"), DateValue("Dec 31, 2012"))

何らかの理由で自分でロールしたい場合は、次の商を切り捨てることができます。

| 1日目-2日目|
---------------
       7

コード例:

Sub test_numWeeks_fn()
    Call numWeeks(DateValue("Jan 1, 2012"), DateValue("Dec 31, 2012"))
End Sub

Function numWeeks(d1 As Date, d2 As Date)
    Dim numDays As Long
    numDays = Abs(d1 - d2)
    numWeeks = Int(numDays / 7)
    Debug.Print numWeeks
End Function

結果:

52
于 2013-02-27T00:19:36.507 に答える
0

ここに画像の説明を入力してください以下のコードを試してください:

Sub example()

Dim dob As Date
dob = #7/31/1986#

Dim todaydt As Date
todaydt = Date

Dim numWeek As Long
numWeek = DateDiff("ww", dob, todaydt) ' Difference in weeks

End Sub
于 2013-02-27T04:15:02.420 に答える