在开发工作表以跟踪业务信息时,可能需要确定日期范围内的所有星期五。最好的方法取决于工作表中的数据以及希望结果显示的方式。

如果一列中有日期列表,则可以使用几个不同的工作表函数来确定这些日期是否为星期五。

WEEKDAY函数返回一个数字1到7,具体取决于用作参数的日期的星期几:

=WEEKDAY(A2)

如果A2中的日期是星期五,则此用法返回数字6。如果将此公式复制到日期的旁边,则可以使用Excel的“自动筛选”功能仅显示工作日为6(星期五)的那些日期。

您还可以使用Excel的条件格式设置功能来简单地突出显示日期列表中的所有星期五。请按照下列步骤操作:

。选择日期列表。

。从格式菜单中选择条件格式。 Excel将显示条件格式对话框。

。使用条件下拉菜单选择公式是。 (请参见图1。)

。在公式区域中,在步骤3中使用的下拉列表的右侧,输入以下公式,将A2替换为在步骤1中选择的活动单元的地址:

。单击格式以显示“设置单元格格式”对话框。

。设置格式选项以根据需要突出显示星期五。

。单击“确定”关闭“设置单元格格式”对话框。您在步骤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培训的来源。

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