Могу ли я протестировать свои формулы Excel, как если бы сегодня был какой-то день в будущем?

#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() — это одна из тех функций, которая часто пересчитывает в любом месте, где она появляется, — и в вашем случае это звучит как много.