vba转换周数(和年)到目前为止?

use*_*328 7 excel vba formula excel-vba

我在Cell C13中有一个星期编号,在Cell C14中有一年.

我使用以下公式将其转换为该周数的星期四:

=DATE(C14,1,-6)-WEEKDAY(DATE(C14,1,3))+C13*7
Run Code Online (Sandbox Code Playgroud)

我怎么能用VBA做同样的事情?

R3u*_*3uK 5

对于特定年份,您可以这样:

DateAdd("ww", WeekNumber - 1, DateSerial(2017, 1, 5))
Run Code Online (Sandbox Code Playgroud)

并对其进行测试:

Debug.Print Format(DateAdd("ww", WeekNumber - 1, DateSerial(YearNumber, 1, 5)), "ddd d MMM yy")
Run Code Online (Sandbox Code Playgroud)

如果其他人正在调查此事,并且不希望有星期四或在2017年不工作

  1. 更改5以适合您的需求!

  2. 或使用以下功能 GetDayFromWeekNumber

测试代码:

Sub test()
    Debug.Print Format(GetDayFromWeekNumber(2017, 1, 4), "ddd d MMM yyyy")
End Sub
Run Code Online (Sandbox Code Playgroud)

泛型函数GetDayFromWeekNumber

Public Function GetDayFromWeekNumber(InYear As Integer, _
                WeekNumber As Integer, _
                Optional DayInWeek1Monday7Sunday As Integer = 1) As Date
    Dim i As Integer: i = 1
    If DayInWeek1Monday7Sunday < 1 Or DayInWeek1Monday7Sunday > 7 Then
        MsgBox "Please input between 1 and 7 for the argument :" & vbCrLf & _
                "DayInWeek1Monday7Sunday!", vbOKOnly + vbCritical
        'Function will return 30/12/1899 if you don't use a good DayInWeek1Monday7Sunday
        Exit Function
    Else
    End If

    Do While Weekday(DateSerial(InYear, 1, i), vbMonday) <> DayInWeek1Monday7Sunday
        i = i + 1
    Loop

    GetDayFromWeekNumber = DateAdd("ww", WeekNumber - 1, DateSerial(InYear, 1, i))
End Function
Run Code Online (Sandbox Code Playgroud)

  • 问题是 OP 没有定义他在一年中的第一周的含义,因此任何编写周数相关公式的人都必须猜测他的真正含义。Excel VBA 包括四个可能的选项;本机 Excel 包括两个;但我想还有其他人。 (2认同)