Джиму необходимо сдвинуть дату в определенной ячейке на один месяц в полночь 14/15 каждого месяца (00:00:00 15-го числа), и он задавался вопросом, как это можно сделать.

Как и в случае со многими другими проблемами в Excel, ответ зависит от характера задействованных данных и от того, что именно вы хотите сделать. Если дата в ячейке является сегодняшней датой, и вы просто хотите, чтобы в ячейке отображался текущий месяц до 14-го числа, а затем следующий месяц после этого, вы можете использовать следующую формулу:

=CHOOSE(IF(DAY(NOW())>14,MONTH(NOW())+1,MONTH(NOW())), "January","February","March","April","May","June", "July","August","September","October","November", "December","January")

Эта формула возвращает название месяца, а не дату. Если вы предпочитаете, чтобы дата возвращалась, вы можете использовать эту формулу:

=IF(DAY(NOW())>14,DATEVALUE(IF(MONTH(NOW())=12,1, MONTH(NOW())+1) & "/" & DAY(NOW()) & "/" & IF(MONTH( NOW())=12,YEAR(NOW())+1,YEAR(NOW()))),NOW())

Обе эти формулы учитывают «переход к концу года» при переходе с декабря на январь. Более короткая версия этой последней формулы может быть создана, если вы используете функцию ДАТА вместо функции ДАТАЗНАЧ:

=DATE(YEAR(NOW()),MONTH(NOW())+((DAY(NOW())>14)*1),1)

Эта формула, в отличие от примера DATEVALUE, всегда возвращает дату, которая является первым днем ​​любого заданного месяца.

Если вы действительно хотите увеличить значение определенной даты в ячейке, вы должны использовать макрос для выполнения этой задачи. Кроме того, вы должны убедиться, что макрос запускается только один раз в месяц, в определенное время в определенный день. Например, если вы хотите, чтобы макрос запускался в 00:00:00 15 числа каждого месяца, вам необходимо настроить макрос так, чтобы он проверял дату и время, а затем запускался в эту конкретную дату и время. Вам также необходимо убедиться, что книга, содержащая макрос, была открыта в указанную дату и время.

Следующий макрос будет извлекать дату из ячейки и увеличивать ее на месяц. Макрос предполагает, что у вас есть именованный диапазон DateCell, который относится к ячейке, которую нужно обновить.

Sub IncreaseMonth()

Dim dDate As Date     dDate = Range("DateCell").Value     Range("DateCell").Value = _       DateSerial(Year(dDate), _       Month(dDate) + 1, Day(dDate))

End Sub

Чтобы убедиться, что макрос запускается в нужное время, вам понадобится другой макрос. Следующий макрос предназначен для запуска при открытии книги:

Private Sub Workbook_Open()

If Day(Now) = 14 Then     Application.OnTime ("23:59:59"), "IncreaseMonth"

End If End Sub

Обратите внимание, что этот конкретный макрос устанавливает метод OnTime таким образом, чтобы он запускал макрос IncreaseMonth в 23:59:59 14 числа. Эта дата и время были выбраны, потому что их легче поймать, чем 00:00:00 15-го числа.

Помните, что макрос IncreaseMonth будет запускаться только в том случае, если вы откроете книгу 14 числа, а затем оставите книгу открытой до 15 числа.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (2180) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:

link: / excelribbon-Automatically_Advancing_by_a_Month [Автоматическое продвижение по месяцу].