|在本文中,我们将创建一个宏以提取两个日期之间的工作日。

在此示例中,我们必须在运行宏之前指定开始日期和结束日期。宏从单元格J8中选择开始日期值,从单元格J9中选择结束日期值。在指定开始日期和结束日期之后,可以通过按“提交”按钮或按快捷键Alt + F8来执行宏。

ArrowMainSheet

运行宏时,它将在新工作表上的两个日期之间返回工作日。新插入的工作表在A列中包含工作日,然后在B列中包含相应的日期。B列中的输出日期将采用dd.mm.yy格式。

每个星期之后都会有一个空白行,以区分两个连续的星期。

ArrowAfterRunningMacro

逻辑解释

在宏中,我们使用“工作日”功能来区分工作日和周末。格式功能用于以所需格式显示日期。

工作日功能

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函数将日期表达式作为输入,并将其作为格式化字符串返回。

格式函数的语法

格式(日期值,格式)

Date_Value指定日期数据类型的值。

格式使用字符串值指定所需的日期格式类型。

下表定义了一些流行的字符,可用于创建所需的日期/时间格式:

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)

为了在每个星期的末尾保留一个空白行,我们已经使用工作日功能检查了星期日,并将“ StartingRow”变量的值增加了1,以便下一行保持空白。

从宏代码中可以看出,我们两次以不同的方式使用了Format函数。首先,我们使用Format(i,“ ddd”)获得工作日,其次,我们使用Format(i,“ dd.mm.yy”)获得dd.mm.yyyy格式的日期。

代码说明

将昏暗的NewWorksheet作为工作表设置NewWorksheet = Worksheets.Add上面的代码用于将工作表对象名称声明为“ NewWorksheet”。

Worksheets.Add方法用于在Worksheets集合中添加新工作表。 Set语句用于使用新插入的图纸初始化声明的对象。

对于i = StartDate到EndDate FOR循环用于从开始日期到结束日期的循环。

如果Weekday(i,2)<6,则使用IF语句检查条件并根据条件执行代码。以上条件将通过“工作日”功能检查返回的值。如果小于6,则IF条件返回true,并且IF语句中的代码将执行。否则,它将被跳过。

StartingRow = 1 StartingRow = StartingRow + 1 StartingRow变量用于在工作表上的行之间移动。在开始时,变量被初始化为第一行。随着IF语句的每次成功执行,变量值将增加1,移动到工作表的下一行。

单元格(StartingRow,1)

单元格属性用于引用工作表上的特定单元格。

通过输入特定的行号和列号作为参数,单元格(行号,列号)可用于引用工作表上的任何单元格。在代码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]