Номер недели ISO в VBScript или VBA

Как я могу получить номер недели ISO некоторой даты в VBScript или VBA?


person Michel de Ruiter    schedule 26.01.2016    source источник


Ответы (2)


Во-первых, обратите внимание, что:

  1. Важно указать неделю год вместе с номером недели, поскольку год даты может быть другим.
  2. Несколько компонентов Windows содержат ошибку, обнаруженную в последний понедельник нескольких лет.

По моему опыту, самый простой, понятный и надежный способ вычислить это:

Sub WeekNum(someDate, isoWeekYear, isoWeekNumber, isoWeekDay)
  Dim nearestThursday
  isoWeekDay = WeekDay(someDate, vbMonday)
  nearestThursday = DateAdd("d", 4 - Int(isoWeekDay), someDate)
  isoWeekYear = Year(nearestThursday)
  isoWeekNumber = Int((nearestThursday - DateSerial(isoWeekYear, 1, 1)) / 7) + 1
End Sub

Это также возвращает день недели ISO, начиная с 1 для понедельника.

person Michel de Ruiter    schedule 26.01.2016
comment
Я предполагаю, что это был вопрос с самостоятельным ответом, это нормально, ТАК поощряет их, но, пожалуйста, улучшите вопрос, он нуждается в небольшом дополнении и в идеале должен показать некоторую попытку решить проблему (даже если у вас, очевидно, уже есть решение ). - person user692942; 26.01.2016
comment
@Lankymart Я не могу представить, какие изменения улучшат вопрос. ИМХО понятно, конкретно, нетривиально и полезно как есть. Поскольку я нигде больше не нашел ответа на этот вопрос, я подумал, что должен поделиться этим «каноническим» ответом. - person Michel de Ruiter; 27.01.2016
comment
Достаточно справедливо, просто обычно такой вопрос считается некачественным, как определено в Как спросить - person user692942; 27.01.2016

Введите любую дату в ячейку A1, затем запустите следующий код...

Range("A2").FormulaR1C1 = "=INT((R1C-DATE(YEAR(R1C-WEEKDAY(R1C-1)+4),1,3)+WEEKDAY(DATE(YEAR(R1C-WEEKDAY(R1C-1)+4),1,3))+5)/7)"
person Herry Markowitz    schedule 26.01.2016
comment
Отлично подходит для Excel! Но я также думал об Access и Word. - person Michel de Ruiter; 26.01.2016
comment
Где в вопросе упоминается Excel? По общему признанию, это плохой вопрос, но все же. - person user692942; 26.01.2016
comment
Это код для получения текущей недели: iThisWeek = DatePart(ww, Date) _ Дата обмена по вашей ячейке или переменной, неделю которой вы хотите узнать. - person Kathara; 26.01.2016
comment
@Lankymart Херри воспринял VBA как подсказку для Excel. - person Michel de Ruiter; 27.01.2016