VBAを使用して、週末や休日なしで月の日・シートを作成します。
この記事では、休日リストで指定されたすべての日付を除いて、指定された年の指定された月の各平日用のシートを作成するマクロを作成します。
マクロを実行する前に、3つの入力が必要です。セルJ10に月番号、セルJ11に年を指定し、休日の日付リストをB16:B26の範囲で指定する必要があります。
入力値を指定したら、送信ボタンをクリックしてマクロを実行します。
このマクロは、休日リストで指定された日付を除く、指定された月の各平日に新しいシートを挿入します。
ロジックの説明
このマクロでは、DateSerial関数を使用して、指定した月の最終日を検索しました。 FORループを使用して、その月の開始日からその月の最後の日付までループしました。検索機能を使用して、使用されている日付が指定された休日リストに存在するかどうかを検索しました。
[#_GoBack] ##平日関数は、日付が平日か週末かを確認するためにIfステートメントとともに使用されます。 Ifステートメントは、日付が平日で休日リストに存在しない場合にのみ新しいシートを挿入します。上のスクリーンショットでわかるように、12月6日は休日リストに含まれているため、12月6日のシートは作成されません。
コードについては以下に従ってください
Option Explicit Sub MonthApply() 'Declaring variables Dim DVariable As Date Dim RngFind As Range Dim MonthNo, YearNo As Integer Dim StartDate, EndDate As Date 'Disabling the screen updates Application.ScreenUpdating = False With Worksheets("Main") 'Getting month and year from cell J10 and J11 from "Main" sheet MonthNo = .Range("J10").Value YearNo = .Range("J11").Value 'Deriving start and end date StartDate = DateSerial(YearNo, MonthNo, 1) EndDate = DateSerial(YearNo, MonthNo + 1, 0) 'Looping through all the dates in the specified month For DVariable = StartDate To EndDate 'Finding if date is marked as holiday Set RngFind = .Range("B16:B26").Find(DVariable) 'Checking whether date is holiday, weekend or weekday If RngFind Is Nothing And Weekday(DVariable, 2) < 6 Then 'Inserting new sheet after the last worksheet in the workbook Worksheets.Add after:=Worksheets(Worksheets.Count) 'Renaming the active sheet ActiveSheet.Name = Format(DVariable, "dd.mm.yy") End If Next DVariable .Select End With Application.ScreenUpdating = True End Sub
このブログが気に入ったら、FacebookやFacebookで友達と共有してください。
皆様からのご意見をお待ちしております。私たちの仕事を改善し、あなたのために改善する方法をお知らせください。 [email protected]までご連絡ください