この記事では、休日リストで指定されたすべての日付を除いて、指定された年の指定された月の各平日用のシートを作成するマクロを作成します。

マクロを実行する前に、3つの入力が必要です。セルJ10に月番号、セルJ11に年を指定し、休日の日付リストをB16:B26の範囲で指定する必要があります。

入力値を指定したら、送信ボタンをクリックしてマクロを実行します。

ArrowMain

このマクロは、休日リストで指定された日付を除く、指定された月の各平日に新しいシートを挿入します。

ArrowAfterRunningMacro

ロジックの説明

このマクロでは、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]までご連絡ください