Создание даты с 1-м, 2-м или 3-м днем ​​недели в Excel - PullRequest
0 голосов
/ 06 декабря 2018

Мне нужно определить, какой день недели у данного числа,

Например, у меня есть Год = Календарная неделя 2018 года = 51 и Число = 3 (Это 3-й день недели)

Календарная неделя 51 выпадает на декабрь месяц

Неделя начинается с понедельника по воскресенье

Поскольку 3-й день на неделе 51 - 19-й, результат должен быть "19/12/2018".

Можем ли мы сделать это в формуле Excel или макросе VBA.

Любая помощь в этом отношении высоко ценится.

Спасибо, Ганеш

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Получено с помощью vba.Один - это макрос, а другой - udf.

Макрос

Sub getWeekDays()
    Dim vDB, vS(), vR()
    Dim y As Integer, s As Date, e As Date
    Dim i As Integer, k As Integer
    Dim n As Integer
    'y = Year
    y = InputBox("Input year : 2018  ")

    s = DateSerial(y, 1, 0)
    e = DateSerial(y + 1, 1, 0)
    n = e - s
    For i = 1 To n
        d = s + i
        If DatePart("ww", d, vbMonday) = DatePart("ww", d + 1, vbMonday) Then
        Else
            k = k + 1
            ReDim Preserve vR(1 To 2, 1 To k)
            vR(1, k) = DatePart("ww", d, vbMonday) & " Wk"
            If k = 1 Then
                vR(1, k) = DatePart("ww", s + 1, vbMonday) & " Wk"
                vR(2, k) = Format(s + 1, "dd.mm.yyyy") & "~" & Format(d, "dd.mm.yyyy")
            Else
                vR(2, k) = Format(d - 6, "dd.mm.yyyy") & "~" & Format(d, "dd.mm.yyyy")
            End If
        End If
    Next i
    Range("a1").CurrentRegion.Clear
    Range("a1").Resize(k, 2) = WorksheetFunction.Transpose(vR)
End Sub

UDF

Function getWeekDay(y As Integer, WeekNum As Integer, DayOrder As Integer)
    Dim s As Date, e As Date
    Dim i As Integer
    Dim n As Integer
    Application.Volatile
    'WeekNum = 51
    'y = Year
    'DayOrder <~~ If third day  DayOrder = 3

    s = DateSerial(y, 1, 0)
    e = DateSerial(y + 1, 1, 0)
    n = e - s
    For i = 1 To n
        d = s + i

        If DatePart("ww", d, vbMonday) = WeekNum Then
            getWeekDay = d + DayOrder - 1
            Exit Function
        End If
    Next i
End Function

enter image description here

0 голосов
/ 06 декабря 2018

Явно копируя из здесь , вы можете использовать формулу Excel:

=DATE(<YearNumber>, 1, -2) - WEEKDAY(DATE(<YearNumber>, 1, 3)) + <WeekNumber> * 7+ <DayNumber> -1   

Итак, =DATE(2018, 1, -2) - WEEKDAY(DATE(2018, 1, 3)) + 51 * 7 + 3 - 1 возвращает 19 декабря 2018 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...