この記事では、2つの日付の間の平日を抽出するマクロを作成します。

この例では、マクロを実行する前に開始日と終了日を指定する必要があります。マクロは、セルJ8から開始日の値を選択し、セルJ9から終了日の値を選択します。開始日と終了日を指定した後、「送信」ボタンを押すか、ショートカットキーAlt + F8を押すことでマクロを実行できます。

ArrowMainSheet

マクロを実行すると、2つの日付の間の平日が新しいシートに返されます。新しく挿入されたワークシートの列Aには平日が含まれ、列Bにはそれぞれの日付が続きます。列Bの出力日はdd.mm.yy形式になります。

毎週、連続する2週間を区別するために、空白行が続きます。

ArrowAfterRunningMacro

ロジックの説明

マクロでは、平日関数を使用して平日と週末を区別しています。フォーマット機能は、必要なフォーマットで日付を表示するために使用されます。

平日関数

Weekday関数は、曜日を表す整数値を返します。

構文

Weekday(Date_Value、[First_Day_Of_Week])

Date_Valueは、曜日を検索する日付値を指定します。

First_Day_Of_Weekは、どの曜日を最初の曜日と見なすかを指定します。整数値またはFirstDayOfWeek列挙から選択された値を入力として受け取ります。値が指定されていない場合、FirstDayOfWeek.Sundayがデフォルト値として使用されます。

Enumeration value

Integer value

Remarks

FirstDayOfWeek.System

0

First day of week specified in system

settings

FirstDayOfWeek.Sunday

1

Sunday (default)

FirstDayOfWeek.Monday

2

Monday

FirstDayOfWeek.Tuesday

3

Tuesday

FirstDayOfWeek.Wednesday

4

Wednesday

FirstDayOfWeek.Thursday

5

Thursday

FirstDayOfWeek.Friday

6

Friday

FirstDayOfWeek.Saturday

7

Saturday

マクロのコードからわかるように、Weekday(i、2)を使用して、月曜日を週の最初の日として指定しました。

フォーマット関数

Format関数は、日付式を入力として受け取り、フォーマットされた文字列として返します。

フォーマット関数の構文

Format(Date_Value、format)

Date_Valueは、日付データ型の値を指定します。

Formatは、文字列値を使用して、必要な日付形式のタイプを指定します。

次の表は、必要な日付/時刻形式を作成するために使用できるいくつかの一般的な文字を定義しています。

Character

Description

d

displays the day as a number without a leading zero (1–31)

dd

displays the day as a number with a leading zero (01–31)

ddd

displays the day as an abbreviation (Sun–Sat)

dddd

displays the day as a full name (Sunday–Saturday)

w

displays the day of the week as a number (1 for Sunday through 7 for

Saturday)

ww

displays the week of the year as a number (1–54)

m

displays the month as a number without a leading zero (1–12)

mm

displays the month as a number with a leading zero (01–12)

mmm

displays the month as an abbreviation (Jan–dec)

mmmm

displays the month as a full month name (January–december)

q

displays the quarter of the year as a number (1–4)

y

displays the day of the year as a number (1–366)

yy

displays the year as a 2-digit number (00–99)

yyyy

displays the year as a 4-digit number (100–9999)

h

displays the hour as a number without leading zeros (0–23)

hh

displays the hour as a number with leading zeros (00–23)

n

displays the minute as a number without leading zeros (0–59)

nn

displays the minute as a number with leading zeros (00–59)

s

displays the second as a number without leading zeros (0–59)

ss

displays the second as a number with leading zeros (00–59)

毎週の終わりに空白行を残すために、weekday関数を使用して日曜日をチェックし、「StartingRow」変数の値を1増やして、次の行が空のままになるようにしました。

マクロのコードに見られるように、Format関数をさまざまな方法で2回使用しました。まず、Format(i、 “ddd”)を使用して平日を取得し、次にFormat(i、 “dd.mm.yy”)を使用して日付をdd.mm.yyyy形式で取得しました。

コードの説明

Dim NewWorksheet As Worksheet Set NewWorksheet = Worksheets.Add上記のコードは、Worksheetオブジェクト名を「NewWorksheet」として宣言するために使用されます。

Worksheets.Addメソッドは、Worksheetsコレクションに新しいワークシートを追加するために使用されます。 Setステートメントは、宣言されたオブジェクトを新しく挿入されたシートで初期化するために使用されます。

For i = StartDate To EndDate FORループは、開始日から終了日までループするために使用されます。

If Weekday(i、2)<6 Then IFステートメントを使用して条件をチェックし、条件に基づいてコードを実行します。上記の条件は、Weekday関数によって返される値をチェックします。 6未満の場合、IF条件はtrueを返し、IFステートメント内のコードが実行されます。それ以外の場合はスキップされます。

StartedRow = 1 StartedRow = StartedRow + 1 StartedRow変数は、ワークシートの行を移動するために使用されます。開始時に、変数は最初の行に初期化されます。 IFステートメントが正常に実行されるたびに、変数値は1ずつ増加し、シートの次の行に移動します。

Cells(StartingRow、1)

Cellsプロパティは、ワークシート上の特定のセルを参照するために使用されます。

Cells(row_number、column_number)を使用して、特定の行番号と列番号をパラメーターとして入力することにより、ワークシート上の任意のセルを参照できます。コードCells(StartingRow、1)では、1が最初の列を指定し、変数「StartingRow」が行番号を定義します。

マクロにコードと一緒にコメントを含めたので、コードを簡単に理解できます。

コードについては以下に従ってください

Option Explicit

Sub ExtractWeekdays()

'Declaring two variables of Date data type

Dim StartDate As Date, EndDate As Date

'Declaring worksheet variable

Dim NewWorksheet As Worksheet

Dim StartingRow, i As Long



'Getting start date and end date values from worksheet

StartDate = Sheets("Macro").Range("J8").Value

EndDate = Sheets("Macro").Range("J9").Value

'Initializing the starting row number for output

StartingRow = 1

'Inserting new worksheet

Set NewWorksheet = Worksheets.Add

For i = StartDate To EndDate



'Using Weekday method to check whether it is Weekday or weekand

If Weekday(i, 2) < 6 Then



'Inserting value on newly inserted worksheet

'Format method is used for formatting the date value

NewWorksheet.Cells(StartingRow, 2) = Format(i, "dd.mm.yy")

NewWorksheet.Cells(StartingRow, 1) = Format(i, "ddd")



'Updating StartingRow variable value for moving to next row

StartingRow = StartingRow + 1

End If



'Inserting blank row for weekend

If Weekday(i, 2) = 7 Then

StartingRow = StartingRow + 1

End If

Next i

Set NewWorksheet = Nothing

End Sub

このブログが気に入ったら、FacebookやFacebookで友達と共有してください。

皆様からのご意見をお待ちしております。私たちの仕事を改善し、あなたのために改善する方法をお知らせください。 [email protected]までご連絡ください