特定日期发生日期的年份(Microsoft Excel)
哈罗德(Harold)正在尝试设计一个公式,该公式将告诉他过去五年中某特定日期(例如5月10日)发生在一周的特定日期(例如星期四)。
您可以通过多种方法来确定此信息。一种简单的方法是,在新工作表中,将要测试的日期(例如5/10/18)输入到单元格A1中。在此下方的A2单元格中,输入上一年的日期:5/10/17。选择这两个单元格,然后向下拖动填充手柄,以得到所需的许多单元格,最后得到一列,其中包含日期为5月10日(降序年份)。
接下来,在单元格B1中输入以下公式:
=WEEKDAY(A1)
向下复制此公式,直到获得与A列中的日期一样多的行。
这将返回值1到7,代表A列中日期的星期几。由于1 =周日,2 =星期一,依此类推,这意味着任何值5都将代表星期四。因此,您可以将此公式放入单元格C1中并向下复制:
=IF(B1=5,YEAR(A1),"")
这会“调出” A列中的日期为星期四的年份。
如果愿意,您可以简单地放弃添加C列,而使用过滤仅显示B列中值为5(星期四)的那些日期。
您还可以使用数组公式来查找所需的信息。
首先,在您想要的任何列中选择五个单元格。然后,在编辑栏中键入以下内容:
=LARGE((WEEKDAY(DATE(ROW(1918:2018),5,10))=5)*ROW(1918:2018),ROW(1:5))
通过按Ctrl + Shift + Enter输入公式。结果是五个单元格将包含最近的五年,其中5月10日是星期四。您可以通过用以下方式将关键元素替换为命名范围来使公式更通用:
=LARGE((WEEKDAY(DATE(ROW(1918:2018),MO,DA))=DW)*ROW(1918:2018),ROW(1:5))
现在,您需要做的就是创建命名范围MO(月),DA(天)和DW(星期几)。在这些命名范围中更改值时,数组公式将更新五个单元格以反映所需的年份。
查找信息的第三种方法是创建一个要求开始日期和星期几的宏。然后,宏可以一次后退一年,直到获得符合条件的五年。
Sub CalcDates() Dim sTemp As String Dim dBegin As Date Dim dWork As Date Dim J As Integer Dim iDoW As Integer Dim iYears(5) As Integer sTemp = InputBox("Beginning Date?") dBegin = CDate(sTemp) If dBegin > 0 Then sTemp = InputBox("Day of Week?") sTemp = LCase(Trim(sTemp)) iDoW = 0 For J = 1 To 7 If sTemp = LCase(WeekdayName(J)) Then iDoW = J Next J If iDoW > 0 Then dWork = dBegin J = 0 While J < 5 If Weekday(dWork) = iDoW Then J = J + 1 iYears(J) = Year(dWork) End If dWork = DateAdd("yyyy", -1, dWork) Wend sTemp = "These are the previous five years in which " sTemp = sTemp & MonthName(Month(dBegin)) & " " & Day(dBegin) sTemp = sTemp & " falls on a " & WeekdayName(iDoW) & ":" sTemp = sTemp & vbCrLf & vbCrLf For J = 5 To 1 Step -1 sTemp = sTemp & iYears(J) & vbCrLf Next J MsgBox sTemp End If End If End Sub
当宏找到五年时,它将在消息框中显示它们。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本提示(13529)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。