1

たとえば、月次ダッシュボードと呼ぶワークブックがあります。この情報は、1 つのセルを除いて、Trial Balance という名前の別のワークブックから完全に作成されます。このデータは、Project Control と呼ばれる週次ワークブックから収集されます。プロジェクト コントロール ファイルは、YYYYWProjectControl.xlsx の形式で保存されます。ここで、YYYY は現在の年を表し、W は週を表します。

記入する必要があるセルは、週次フォームの現在までのすべてのプロジェクトの合計売上高です。私がする必要があるのは、最後に作成されたプロジェクト管理をプログラムで開き、この売上高を取得して閉じて保存することです。

前のプロジェクトの一部として、閉じて保存することはすべて完了していますが、現在の週番号を確認する方法と、最後に作成されたファイルを確認する方法を知る必要があります。誰もこれを行う方法の手がかりを持っていますか? その場合、年末に近づくと、その 1 月に最後に作成された 2013 年のプロジェクト コントロールを検索する必要があり、存在しない場合は 2012 を検索する必要があることにも注意してください。

前もって感謝します

4

1 に答える 1

3

実際の週と会計(財務)週のどちらを参照しているかに応じて、次の2つの関数のいずれかを使用して計算できます。

会計週:

Function FiscalWeek(dtDate As Variant)

Dim dtFiscal    As Date
Dim dtFstMon    As Date
Dim i           As Integer

    'Ensure we are working with a valid date
    If Not IsDate(dtDate) Then
        FiscalWeek = "Invalid Date"
        Exit Function
    End If

    'Strip out any timestamps
    dtFiscal = DateSerial(Year(dtDate), Month(dtDate), Day(dtDate))

    'Determine first Monday of April for given year
    i = 1
    Do Until Weekday(DateSerial(Year(dtFiscal), 4, i), 2) = 1
        i = i + 1
    Loop

    dtFstMon = DateSerial(Year(dtFiscal), 4, i)

    'Work out the difference in weeks from April for the relevant year
    Select Case dtFiscal
        Case Is < dtFstMon
            FiscalWeek = DateDiff("WW", DateSerial(Year(dtFiscal) - 1, 4, 1), dtFiscal, 2)
        Case Else
            FiscalWeek = DateDiff("WW", DateSerial(Year(dtFiscal), 4, 1), dtFiscal, 2) + IIf(i = 1, 1, 0)
    End Select

End Function

または実際の週:

Function ActualWeek(dtDate As Variant)

Dim dtActual    As Date
Dim dtFstMon    As Date
Dim i           As Integer

    'Ensure we are working with a valid date
    If Not IsDate(dtDate) Then
        ActualWeek = "Invalid Date"
        Exit Function
    End If

    'Strip out any timestamps
    dtActual = DateSerial(Year(dtDate), Month(dtDate), Day(dtDate))

    'Determine first Monday of January for given year
    i = 1
    Do Until Weekday(DateSerial(Year(dtActual), 1, i), 2) = 1
        i = i + 1
    Loop

    dtFstMon = DateSerial(Year(dtActual), 1, i)

    'Work out the difference in weeks from January for the relevant year
    Select Case dtActual
        Case Is < dtFstMon
            ActualWeek = DateDiff("WW", DateSerial(Year(dtActual) - 1, 1, 1), dtActual, 2)
        Case Else
            ActualWeek = DateDiff("WW", DateSerial(Year(dtActual), 1, 1), dtActual, 2) + IIf(i = 1, 1, 0)
    End Select

End Function
于 2012-11-01T10:48:15.187 に答える