克里斯汀(Christine)需要一种方法来计算给定月份的第一个星期二。

因此,给定一个月零一年,她需要获取第一个星期二的日期。

您可以使用许多不同的公式来获得所需的结果。大多数方法都以某种方式使用WEEKDAY函数,因为它可以返回代表任何给定日期的星期几的数值。假设您在A1单元格(1到12)中输入了一个月,在A2单元格中输入了四位数的年份,则以下公式将全部返回该月第一个星期二的日期。 (我按从长到短的长度顺序排列了公式。)

=DATE(A2,A1,1)+IF(WEEKDAY(DATE(A2,A1,1))=3,0,IF(WEEKDAY(DATE(A2,A1,1))>3,7-WEEKDAY(DATE(A2,A1,1))+3,3-WEEKDAY(DATE(A2,A1,1))))

=IF(3-WEEKDAY(DATE(A2,A1,1))>=0,DATE(A2,A1,1)+3-WEEKDAY(DATE(A2,A1,1)),DATE(A2,A1,1)+7+3-WEEKDAY(DATE(A2,A1,1)))

=DATE(A2,A1,1)+IF(3-WEEKDAY(DATE(A2,A1,1))>=0,3-WEEKDAY(DATE(A2,A1,1)),10-WEEKDAY(DATE(A2,A1,1)))

=DATE(A2,A1,1)-WEEKDAY(DATE(A2,A1,1),1)+3+IF(WEEKDAY(DATE(A2,A1,1),1)>3,7,0)

=DATE(A2,A1,1)+8-DAY(DATE(A2,A1,1))-WEEKDAY(DATE(A2,A1,1)-DAY(DATE(A2,A1,1))-2)

=DATE(A2,A1,1)+3-WEEKDAY(DATE(A2,A1,1))+(1-(3>=WEEKDAY(DATE(A2,A1,1))))*7 =DATEVALUE(A2&"/"&A1&"/1")+MOD(10-WEEKDAY(DATEVALUE(A2&"/"&A1&"/1")),7)

=DATE(A2,A1,MATCH(TRUE,WEEKDAY(DATE(A2,A1,{1,2,3,4,5,6,7}))=3,0))

=DATE(A2,A1,MOD(10-WEEKDAY(DATE(A2,A1,1)),7)+1)

=DATE(A2,A1,1)+MOD(3-WEEKDAY(DATE(A2,A1,1)),7)

=DATE(A2,A1,1)+7-WEEKDAY(DATE(A2,A1,1),13)

=DATE(A2,A1,8-WEEKDAY(DATE(A2,A1,1),13))

=DATE(A2,A1,7)-MOD(DATE(A2,A1,7)-3,7)

=DATE(A2,A1,8-WEEKDAY(DATE(A2,A1,5)))

=DATE(A2,A1,8)-WEEKDAY(DATE(A2,A1,5))

如果您发现在要评估的月份内指定日期更方便,则可以修改公式以将其考虑在内。以下是将实际日期放入单元格A1中可以使用的一些公式:

=DATE(YEAR(A1),MONTH(A1),MATCH(TRUE,WEEKDAY(DATE(YEAR(A1),MONTH(A1),{1,2,3,4,5,6,7}))=3,0))

=DATE(YEAR(A1),MONTH(A1),MOD(10-WEEKDAY(DATE(YEAR(A1),MONTH(A1),1)),7)+1)

=DATE(YEAR(A1),MONTH(A1),1)+MOD(3-WEEKDAY(DATE(YEAR(A1),MONTH(A1),1)),7)

=DATE(YEAR(A1),MONTH(A1),1)+7-WEEKDAY(DATE(YEAR(A1),MONTH(A1),1),13)

=DATE(YEAR(A1),MONTH(A1),8-WEEKDAY(DATE(YEAR(A1),MONTH(A1),1),13))

=DATE(YEAR(A1),MONTH(A1),7)-MOD(DATE(YEAR(A1),MONTH(A1),7)-3,7)

=DATE(YEAR(A1),MONTH(A1),8-WEEKDAY(DATE(YEAR(A1),MONTH(A1),5)))

=DATE(YEAR(A1),MONTH(A1),8)-WEEKDAY(DATE(YEAR(A1),MONTH(A1),5))

=A1-DAY(A1)+7-WEEKDAY(A1-DAY(A1)-1,3)

最后,您可能需要考虑基于宏的方法。以下是用户定义的函数,可以快速找出第一个星期二:

Function FirstTuesday(M As Integer, Y As Integer) As Date     Dim dResult As Date

dResult = DateSerial(Y, M, 1)

Do While Weekday(dResult) <> vbTuesday         dResult = DateAdd("d", 1, dResult)

Loop     FirstTuesday = dResult End Function

您在工作表中所需要做的就是将数字和月份传递给用户定义的函数:

=FirstTuesday(6,2018)

如果愿意,可以指定月份和年份在单元格中:

=FirstTuesday(A2,A1)

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

本提示(13540)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。