Автоматическое продвижение по месяцу (Microsoft Excel)
Джиму необходимо сдвинуть дату в определенной ячейке на один месяц в полночь 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 [Автоматическое продвижение по месяцу]
.