拉所有星期五(Microsoft Excel)
在开发工作表以跟踪业务信息时,可能需要确定日期范围内的所有星期五。最好的方法取决于工作表中的数据以及希望结果显示的方式。
如果一列中有日期列表,则可以使用几个不同的工作表函数来确定这些日期是否为星期五。
WEEKDAY函数返回一个数字1到7,具体取决于用作参数的日期的星期几:
=WEEKDAY(A2)
如果A2中的日期是星期五,则此用法返回数字6。如果将此公式复制到日期列旁边,则可以使用Excel的“自动筛选”功能仅显示工作日为6(星期五)的那些日期。
您还可以使用Excel的条件格式设置功能来简单地突出显示日期列表中的所有星期五。请按照下列步骤操作:
。选择日期列表。
。确保显示功能区的“主页”选项卡。
。单击“样式”组中的“条件格式设置”工具。 Excel显示一系列选择。
。单击新规则。 Excel将显示“新格式设置规则”对话框。
(参见图1。)
。在对话框顶部的“选择规则类型”区域中,选择“使用公式来确定要格式化的单元格”。 (请参见图2。)
。在公式区域中输入以下公式,将A2替换为在步骤1中选择的活动单元的地址:= WEEKDAY(A2)= 6。单击格式以显示“设置单元格格式”对话框。
。设置格式选项以根据需要突出显示星期五。
。单击“确定”关闭“设置单元格格式”对话框。
。单击确定。
如果要根据开始日期和结束日期确定一系列星期五,则可以设置一系列公式来计算它们。
假设开始日期在A2中,而结束日期在A3中,则可以使用以下公式计算出第一个星期五的日期:
=IF(A2+IF(WEEKDAY(A2)<=6,6-WEEKDAY(A2),6)>A3, "",A2+IF(WEEKDAY(A2)<=6,6-WEEKDAY(A2),6))
如果将此公式放在单元格C2中,然后将其设置为日期格式,则可以使用以下公式确定范围内的下一个星期五:
=IF(C2="","",IF(C2+7>$A$3,"",C2+7))
如果将此公式复制为一堆单元格,则最终会得到A2和A3指定的日期范围之间的星期五列表。
如果您实际上想在特定的日期范围内“拉”星期五,那么您将需要使用宏。有几种方法可以解决此问题。这个简单的宏将检查A2:A24范围内的所有日期。
如果是星期五,则将日期复制到C列,从C2开始。结果当然是,从C2开始的列表将仅包含星期五的日期。
Sub PullFridays1() Dim dat As Range Dim c As Range Dim rw As Integer Set dat = ActiveSheet.Range("A2:A24") rw = 2 For Each c In dat If Weekday(c) = vbFriday Then Cells(rw, 3).Value = Format(c) rw = rw + 1 End If Next End Sub
如果需要,您可以通过更改A2:A24引用来更改宏检查的范围,并且可以通过更改rw(行)和3(列)中的值来更改写入日期的位置。细胞功能。
如果您希望使用开始日期和结束日期,则可以修改宏,以便它可以逐步浏览日期。下面的宏假定开始日期在单元格A2中,而结束日期在单元格A3中。
Sub PullFridays2() Dim dStart As Date Dim dEnd As Date Dim rw As Integer dStart = Range("A2").Value dEnd = Range("A3").Value rw = 2 While dStart < dEnd If Weekday(dStart) = vbFriday Then Cells(rw, 3).Value = dStart Cells(rw, 3).NumberFormat = "m/d/yyyy" rw = rw + 1 End If dStart = dStart + 1 Wend End Sub
宏仍将星期五从范围中拉出,并将其放入从C2开始的列表中。
另一种宏方法是创建一个用户定义的函数,该函数返回某个范围内的特定星期五。只是这样做:
Function PullFridays3(dStartDate As Date, _ dEndDate As Date, _ iIndex As Integer) Dim iMaxDays As Integer Dim dFirstday As Date Application.Volatile If dStartDate > dEndDate Then PullFridays3 = CVErr(xlErrNum) Exit Function End If dFirstday = vbFriday - Weekday(dStartDate) + dStartDate If dFirstday < dStartDate Then dFirstday = dFirstday + 7 iMaxDays = Int((dEndDate - dFirstday) / 7) + 1 PullFridays3 = "" If iIndex = 0 Then PullFridays3 = iMaxDays ElseIf iIndex <= iMaxDays Then PullFridays3 = dFirstday + (iIndex - 1) * 7 End If End Function
您可以通过以下方式在工作表的单元格中使用此功能:
=PULLFRIDAYS3(A2,A3,1)
该函数的第一个参数是开始日期,第二个参数是结束日期。第三个参数指示要从指定范围内返回哪个星期五。如果使用1,则得到第一个星期五,2返回第二个星期五,依此类推。如果对第三个参数使用0,则该函数返回指定范围内的星期五数。如果指定的开始日期大于结束日期,则该函数返回#NUM错误。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(8147)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本: