丹(Dan)正在建立一个工作表供他的公司使用,并需要一种方法来计算http://calendarcorner.net/[calendar]月的第一个工作日。他知道如何计算一个月的第一天,但​​这一天可能会落在周末或假日。

有几种方法可以计算给定月份的第一个工作日。以下公式是一个不错的起点:

=DATE(YEAR(A1),MONTH(A1),1)+CHOOSE(WEEKDAY(DATE(YEAR(A1),MONTH(A1),1)),1,0,0,0,0,0,2)

此公式假定您要在单元格A1中任何日期的月份中的第一个工作日。因此,如果单元格A1中的日期为2011年3月26日,则该公式假定您想要2011年3月的第一个工作日。

如果您的系统上安装了Analysis ToolPak,则公式变得更加简单:

=WORKDAY(EOMONTH(A1,-1), 1)

EOMONTH函数返回单元格A1中日期之前一个月的最后一天,然后WORKDAY函数返回下个月的第一个工作日。因为WORKDAY有点古怪,所以将函数这样组合在一起(使用EOMONTH);它假定第一个参数是有效的工作日。这意味着它不会检查参数中使用的日期是否在周一至周五的工作周内。通过将参数强制为要确定第一个工作日的月份的前一天并将第二个参数设置为1,该函数将返回所需月份的第一个实际工作日。

WORKDAY函数还使您可以有选择地指定应考虑假期。最简单的方法是在单元格区域中设置假日日期列表,然后命名该范围。 (在_ExcelTips_的其他问题中讨论了如何命名范围。)如果给范围命名,例如MyHolidays,则可以使用以下版本的公式:

=WORKDAY(EOMONTH(A1,-1), 1, MyHolidays)

如果您要计算一年中任何给定月份的开始工作日,这是一个巧妙的技巧。假定单元格A1包含年份(例如2011),并且单元格A2包含月份数字1到12,代表您想要开始工作日的月份。然后,您可以使用以下公式获得所需的日期:

=WORKDAY(DATE(A1,1,0), A2, MyHolidays)

在此公式中使用DATE函数的方式将返回单元格A1中指定的年份之前的一年的最后一天。然后,将A2中的值用于向前移动该月数,而MyHolidays(与以前一样)说明该月可能发生的任何假期。

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

本技巧(10199)适用于Microsoft Excel 97、2000、2002和2003。您可以在以下位置找到用于Excel功能区界面(Excel 2007及更高版本)的本技巧的版本:

链接:/ excelribbon-Calculating_the_First_Business_Day_of_the_Month [计算本月的第一个工作日]。