有没有想过在给定的月份中某个特定工作日发生了多少?对于某些人来说,重要的是要知道一个月中有多少个星期二。谁又不想知道某个特定的月份是否会有四个或五个星期六?

Excel不包含一个内在函数,您可以使用该函数来确定特定月份在给定月份内发生的次数。但是,您可以创建自己的公式和函数来完成任务。

首先,考虑以下公式。

=4+N((WEEKDAY(DATE(YEAR($A$1),MONTH($A$1),1)))



(DAY(DATE(YEAR($A$1),MONTH($A$1)+1,0))-28)>(7*(( WEEKDAY(DATE(YEAR($A$1),MONTH($A$1),1)))>(1+ROW()- ROW($A$2)))+(1+ROW()-ROW($A$2))))

该公式依赖于A1中的日期。该日期应该是您要“测试”的月份。该公式应复制到第2行的一个单元格中,然后复制到该行下方的六个单元格中。例如,您可以将此公式复制到单元格B2:B8的范围内。第一个响应(B2)是一个月中的星期日数,第二个响应(B3)是星期一中的数,依此类推。

该公式的缺点是它使用包含该公式的单元格的位置作为公式的一部分。这意味着公式必须放在第二行的某个位置。

另一个缺点是公式相当长且复杂。如果需要较短的公式,则需要使用数组公式。您可以使用的一个方便的公式假设您提供了三个参数:年份(单元格C2),月份(单元格D2)和工作日(单元格E2)。对于这三个项目,以下公式非常有用:

=SUM(IF(WEEKDAY(DATE(C2, D2, ROW(INDIRECT("1:" & DAY(DATE(C2, D2+1, 0))))))=E2, 1, 0))

请记住,这是一个数组公式,这意味着您必须通过按Shift + Ctrl + Enter来输入它。此外,您在单元格E2中输入的工作日值必须在1到7的范围内,其中1是星期日,2是星期一,依此类推。

您可以使用的另一个出色公式如下:

=NETWORKDAYS.INTL(DATE(YEAR(A1),MONTH(A1),1),EOMONTH(A1,0), REPT("1",B1-1) & "0" & REPT("1",7-B1))

该通用公式仅需要两个值即可正常工作。第一个是您要分析的月份内的日期。这进入单元格A1。在单元格B1中,您应该放置要计算的工作日的指标。此值与以前的公式不同-虽然它仍必须在1到7的范围内,1是星期一,2是星期二,依此类推。

如果您的工作表设计不允许您在不同的单元格中输入年,月和日,那么一个干净的解决方案是创建一个用户定义的函数以返回计数。以下宏是此类函数的示例。

您可以通过在单元格中输入以下内容来使用该功能:

Function MonthWeekDays(dDate As Date, iWeekDay As Integer)

Dim dLoop As Date

If iWeekDay < 1 Or iWeekDay > 7 Then         MonthWeekDays = CVErr(xlErrNum)

Exit Function     End If     MonthWeekDays = 0     dLoop = DateSerial(Year(dDate), Month(dDate), 1)

Do While Month(dLoop) = Month(dDate)

If WeekDay(dLoop) = iWeekDay Then _           MonthWeekDays = MonthWeekDays + 1         dLoop = dLoop + 1     Loop End Function

在这种用法中,第一个参数(单元格A1)包含要评估的月份中的日期。第二个参数是一个数值,表示您要计算的工作日。此值必须在1到7的范围内,其中1是星期日,2是星期一,依此类推。

=MonthWeekDays(A1,4)

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(5684)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本:

链接:/ excel-Weekdays_in_a_Month [一个月的工作日]。