Кристине нужен способ рассчитать первый вторник любого месяца. Итак, учитывая месяц и год, ей нужно получить дату того первого вторника.
Есть довольно много разных формул, которые вы можете использовать для достижения желаемого результата. В большинстве подходов функция WEEKDAY так или иначе используется, поскольку она может возвращать числовое значение, представляющее день недели для любой заданной даты. Предполагая, что вы поместили месяц в ячейку A1 (с 1 по 12) и четырехзначный год в ячейку A2, все следующие формулы вернут дату первого вторника месяца. (Я расположил формулы в порядке длины, от самого длинного к самому короткому.)
= DATE (A2, A1,1) + IF (WEEKDAY (DATE (A2, A1,1)) = 3,0, ЕСЛИ (ДЕНЬ НЕДЕЛИ (ДАТА (A2; A1,1))> 3,7-ДЕНЬ НЕДЕЛИ (ДАТА (A2; A1,1)) + 3,3-ДЕНЬ НЕДЕЛИ (ДАТА (A2; A1,1)) )) = IF (3-WEEKDAY (DATE (A2; A1,1))> = 0, DATE (A2, A1,1) + 3-WEEKDAY (DATE (A2, A1,1)), DATE (A2, A1 , 1) + 7 + 3-WEEKDAY (DATE (A2, A1,1))) = DATE (A2, A1,1) + IF (3-WEEKDAY (DATE (A2, A1,1))> = 0,3 -НЕДЕЛЬНЫЙ ДЕНЬ (ДАТА (A2; A1,1)), 10-ДЕНЬ НЕДЕЛИ (ДАТА (A2; A1,1))) = ДАТА (A2; A1,1) -НЕДЕЛЬНЫЙ ДЕНЬ (ДАТА (A2; A1,1); 1) + 3 + IF (WEEKDAY (DATE (A2, A1,1), 1)> 3,7,0) = DATE (A2, A1,1) + 8-DAY (DATE (A2, A1,1)) - WEEKDAY (ДАТА (A2; A1,1) -ДЕНЬ (ДАТА (A2; A1,1)) - 2) = ДАТА (A2; A1,1) + 3-ДЕНЬ (ДАТА (A2; A1,1)) + (1 - (3> = WEEKDAY (DATE (A2, A1,1)))) * 7 = DATEVALUE (A2 & "/" & A1 & "/1") + MOD (10-WEEKDAY (DATEVALUE (A2 & "/" & A1 & "/1 ")), 7) = ДАТА (A2, A1, ПОИСКПОЗ (ИСТИНА, ДЕНЬ НЕДЕЛИ (ДАТА (A2, A1, {1,2,3,4,5,6,7})) = 3,0)) = ДАТА (A2, A1, MOD (ДЕНЬ 10 (ДАТА (A2, A1,1)), 7) +1) = ДАТА (A2, A1,1) + MOD (ДЕНЬ 3 (ДАТА (A2, A1,1) ), 7) = ДАТА (A2; A1,1) + 7-ДЕНЬ НЕДЕЛИ (ДАТА (A2; A1,1); 13) = ДАТА (A2; A1,8-ДЕНЬ НЕДЕЛИ (ДАТА (A2; A1,1); 13 )) = ДАТА (A2; A1,7) -MOD (DATE (A2; A1,7) -3,7) = DAT E (A2, A1,8-WEEKDAY (DATE (A2, A1,5))) = DATE (A2, A1,8) -WEEKDAY (DATE (A2, A1,5))
Если вам удобнее указать дату в месяце, который вы хотите оценить, вы можете изменить формулы, чтобы учесть это. Ниже приведены лишь несколько формул, которые вы можете использовать, если поместите фактическую дату в ячейку A1:
= DATE (YEAR (A1), MONTH (A1), MATCH (TRUE, WEEKDAY (DATE ( ГОД (A1), МЕСЯЦ (A1), {1,2,3,4,5,6,7})) = 3,0)) = ДАТА (ГОД (A1), МЕСЯЦ (A1), MOD (10- ДЕНЬ НЕДЕЛИ (ДАТА (ГОД (A1), МЕСЯЦ (A1), 1)), 7) +1) = ДАТА (ГОД (A1), МЕСЯЦ (A1), 1) + MOD (ДЕНЬ 3 (ДАТА (ГОД (A1) ), МЕСЯЦ (A1), 1)), 7) = ДАТА (ГОД (A1), МЕСЯЦ (A1), 1) + 7-ДЕНЬ (ДАТА (ГОД (A1), МЕСЯЦ (A1), 1), 13) = ДАТА (ГОД (A1), МЕСЯЦ (A1), 8-НЕДЕЛ. (ДАТА (ГОД (A1), МЕСЯЦ (A1), 1), 13)) = ДАТА (ГОД (A1), МЕСЯЦ (A1), 7) -MOD (ДАТА (ГОД (A1); МЕСЯЦ (A1); 7) -3,7) = ДАТА (ГОД (A1), МЕСЯЦ (A1), 8-ДЕНЬ (ДАТА (ГОД (A1), МЕСЯЦ (A1) , 5))) = ДАТА (ГОД (A1), МЕСЯЦ (A1), 8) -ДЕНЬ (ДАТА (ГОД (A1), МЕСЯЦ (A1), 5)) = A1-ДЕНЬ (A1) + 7-ДЕНЬ НЕДЕЛИ ( A1-DAY (A1) -1,3)
Наконец, вы можете рассмотреть подход на основе макросов. Ниже приводится определяемая пользователем функция, которая быстро вычисляет первый вторник:
Функция FirstTuesday (M как целое число, Y как целое число) As Date Dim dResult As Date dResult = DateSerial (Y, M, 1) Выполните в то время как будний день (dResult) vbTuesday dResult = DateAdd ("d", 1, dResult) Loop FirstTuesday = dResultEnd Function
Все, что вам нужно сделать на рабочем листе, – это передать пользователю -определенная функция желаемые числовые месяц и год:
= FirstTuesday (6,2018)
Если хотите, вы можете указать, что месяц и год находятся в ячейка:
= Первый вторник (A2, A1)