在Excel中使用VBA工作表周五
|在本文中,我们将创建一个宏以提取两个日期之间的工作日。
在此示例中,我们必须在运行宏之前指定开始日期和结束日期。宏从单元格J8中选择开始日期值,从单元格J9中选择结束日期值。在指定开始日期和结束日期之后,可以通过按“提交”按钮或按快捷键Alt + F8来执行宏。
运行宏时,它将在新工作表上的两个日期之间返回工作日。新插入的工作表在A列中包含工作日,然后在B列中包含相应的日期。B列中的输出日期将采用dd.mm.yy格式。
每个星期之后都会有一个空白行,以区分两个连续的星期。
逻辑解释
在宏中,我们使用“工作日”功能来区分工作日和周末。格式功能用于以所需格式显示日期。
工作日功能
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]