У Джейсона есть рабочий лист, который содержит несколько столбцов, каждый из которых представляет финансовую неделю его компании. Эти финансовые недели начинаются со столбца G, столбец H — это вторая финансовая неделя, столбец I — третья неделя и так далее. Джейсон хотел бы создать макрос, который при запуске будет смотреть на сегодняшнюю дату, вычислять финансовую неделю на основе этой даты, а затем скрывать любой из столбцов финансовой недели, которые не входят в указанный диапазон.

Чтобы дать ответ, я предполагаю, что диапазон, который вы хотите отобразить, будет равен 13 неделям (одному кварталу)

непосредственно перед текущей финансовой неделей. Имея это в виду, макрос должен сделать несколько вещей. Во-первых, он должен определить, какая сейчас финансовая неделя. Затем он должен скрыть все недели, кроме 13 недель, предшествующих текущей финансовой неделе, и показать все те, которые есть.

Все это относительно легко сделать, за исключением того, чтобы выяснить, какая сейчас финансовая неделя. Метод определения финансовых недель может сильно различаться от компании к компании. Однако для простоты я предполагаю, что определение довольно простое: разделите день года на семь и посмотрите, что у нас получится.

Следующий макрос реализует рассмотренный выше подход.

Sub HideWeeks()

Dim BeginYear As Date           'start of fiscal year date     Dim FirstWeekCol As Integer     'first fiscal week column     Dim FirstShowWkCol As Integer   'first column to show     Dim CurrWkCol As Integer        'current week column     Dim J As Integer

BeginYear = Cells(1, 1).Value     FirstWeekCol = 7  'fiscal weeks begin with Col 7 (G)



'Calculate Column of the current fiscal week     CurrWkCol = ((Date - BeginYear) \ 7) + FirstWeekCol - 1     'Calculate column of the first week to show     FirstShowWkCol = CurrWkCol - 14     If FirstShowWkCol < FirstWeekCol Then         FirstShowWkCol = FirstWeekCol     End If

Application.ScreenUpdating = False

'Unhide all columns     Columns("G:IV").Hidden = False  'Unhide all week Columns

'Hide week column before the rolling quarter     For J = FirstWeekCol To FirstShowWkCol         Columns(J).Hidden = True     Next J

'Hide week column after current week     For J = CurrWkCol + 1 To 256         Columns(J).Hidden = True     Next intCol

Application.ScreenUpdating = True End Sub

Обратите внимание, что есть одно значение, которое необходимо взять из рабочего листа в этом макросе: последний день предыдущего года. Предполагается, что это находится в ячейке A1, и он захватывается и помещается в переменную BeginYear. Это значение используется для определения дня текущего года.

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

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

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

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

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

link: / excelribbon-Hiding_Columns_Not_within_a_Date_Range [Скрытие столбцов за пределами диапазона дат].