جیسون یک کاربرگ دارد که شامل چندین ستون است که هر کدام نشان دهنده یک هفته مالی برای شرکتش است. این هفتههای مالی با ستون 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 J
Application.ScreenUpdating = True
End Sub
توجه داشته باشید که یک مقدار وجود دارد که باید از کاربرگ در این ماکرو برداشت شود: آخرین روز سال قبل. فرض بر این است که این در سلول A1 است و در متغیر BeginYear قرار می گیرد. این مقدار برای تعیین روز سال جاری استفاده می شود.