#excel #excel-formula
#excel #excel-формула
Вопрос:
Я создаю новую панель мониторинга, которая обновляется ежедневно. Панель мониторинга включает данные за текущий месяц, а также данные за предыдущий месяц. Однако мне нужно попробовать несколько разных сценариев с точки зрения дат, чтобы убедиться, что месячные переходы работают без проблем. Например, я хотел бы знать, что будут делать мои формулы, когда это первый день месяца и второй день месяца с разными условиями, такими как 1-й день выходных или праздничных дней и т. Д., Где у меня не будет никаких данных, что приведет к ошибкам.
Я пытался исправлять формулы, но было задействовано слишком много формул, связанных друг с другом. Также данные извлекаются из SQL server, где я также использую GETDATE().
Например, одна из моих формул показывает
=YEAR(TODAY()-1)amp;IF(MONTH(TODAY()-1)<10,0amp;MONTH(TODAY()-1),MONTH(TODAY()-1))
чтобы получить год и месяц (например, 201904 за апрель 2019 года). Это одна из многих формул, в которые встроена функция today()
В общем, мне интересно, могу ли я изменить дату, которую считывает Excel. Например, у меня есть формула с =TODAY() — я хочу, чтобы эта формула возвращала другие дни, которые я установил, а не фактическую дату сегодняшнего дня.
Комментарии:
1. Вы пробовали добавлять и вычитать в today()? сегодня () 1
2. Как насчет ссылки на диапазон, значение которого по умолчанию равно
TODAY()-1
? Затем вы можете изменить значение в этом диапазоне, чтобы протестировать другие даты.3. Поместите
=TODAY()
ячейку, которая будет содержать это значение. Измените все свои формулы, чтобы ссылаться на эту ячейку. Например, если ячейка содержит=TODAY()
значение A1, то показанная вами формула будет:=YEAR(A1-1)amp;IF(MONTH(A1-1)<10,0amp;MONTH(A1-1),MONTH(A1-1))
. Теперь настройте ячейку, содержащую информацию о сегодняшнем дне, на любую дату, которую вы хотите протестировать в будущих датах. Установите его обратно=TODAY()
, когда тестирование будет завершено.4. Привет, спасибо всем за ваши комментарии. Я думал о том, чтобы сделать это таким образом, но испугался, потому что формул слишком много, и я боюсь, что ctrl h не исправит все формулы, которые мне нужно исправить.
5. Тем не менее, я попробую, если не появятся другие хорошие ответы. Еще раз всем спасибо!
Ответ №1:
Сначала поместите эту пользовательскую функцию в стандартный модуль:
Public Function todaz() As Date
todaz = Evaluate("=today()") 12
End Function
Затем в вашем листе замените все экземпляры:
Today()
с:
todaz()
Вы можете изменить пользовательскую функцию, чтобы иметь любое смещение даты, которое вы пожелаете.
Когда вы закончите тестирование, измените все todaz()
обратно на Today()
.
Комментарии:
1. Большое вам спасибо, похоже, это именно то, что мне было нужно.
Ответ №2:
Вот версия, отличная от VBA:
Если у вас есть ячейка, в которую вы помещаете только =Today().
на листе, замените все другие экземпляры Today() ссылкой на эту ячейку. Для тестирования замените Today()
на любую дату, которую вы хотите, а когда закончите, вставьте Today()
обратно.
Преимущество как этой, так и версии Gary Student в том, что они менее изменчивы, то есть они будут выполняться намного быстрее, потому что Today() — это одна из тех функций, которая часто пересчитывает в любом месте, где она появляется, — и в вашем случае это звучит как много.