如何列出给定月份的所有星期五

如何列出给定月份的所有星期五

我有个问题,如何列出给定月份中所有星期五的日期?有些月份有 5 个星期五,有些月份有 4 个星期五。

2020 年 5 月,例如 A1=01/May/2020,结果应在 B1:B5 中显示为 01/May、08/May、15/May、22/May、29/May

感谢您花时间帮助我。

答案1

对于第一个星期五,使用

=CEILING(EOMONTH(A1,-1)-5,7)+6

对于接下来的三个,将上面的日期加 7。对于第五个,检查上面的日期 + 7 是否仍在所需的月份。如果是,则添加 7,如果不是,则返回空白

在此处输入图片描述

答案2

在 B1 中输入以下公式来计算该月的第一个星期五。计算方法是将 A1 中输入的日期的前一天考虑在内,从而找到第一个星期五。在本例中,第一个星期五是与 4 月 30 日进行比较得出的。

=WORKDAY.INTL(A1-1,1,"1111011")

在 B2 中,输入此公式来计算其他星期五。它们是通过考虑前一个单元格中的后一天来找到的。因此,如果 5 月 1 日是星期五,则下一个星期五从 2 号开始计算。还会进行比较以检查两个单元格中的月份是否相同。如果是,则显示日期。如果不是,则将显示一个空值。

=IF(MONTH(WORKDAY.INTL(B1+1,1,"1111011"))=MONTH(B1), WORKDAY.INTL(B1+1,1,"1111011"),"")

将 B2 中的公式向下拖动。

在此处输入图片描述

答案3

我建议最快的方法是使用 VBA Macro,这种方法很直接,无需调整,而且还能节省时间。


在此处输入图片描述


Sub AllFriday()

getmonth = InputBox("Enter month Like This,,", "Enter Month", "1/1/20")
 
 While WorksheetFunction.Weekday(DateValue(getmonth)) <> 6
  getmonth = DateValue(getmonth) + 1
 Wend
 
 Range("A51") = DateValue(getmonth)
 cnta = 1
 
 While Month(DateValue(getmonth) + 7) = Month(getmonth)
  Range("A51").Offset(cnta, 0) = DateValue(getmonth) + 7
  cnta = cnta + 1
  getmonth = DateValue(getmonth) + 7
 
 Wend

End Sub

注意:

  • Alt + F11获取 VB 编辑器。
  • C奥皮&将此代码粘贴为工作表模块(标准模块)。
  • Alt+Q 返回工作表。
  • 将工作簿另存为acro 已启用*.xlsm
  • 运行宏。
  • 此代码将显示行 (A51:A54) 中的所有星期五。

如果想要列 (A51:D51) 中的星期五,则使用这个,,

Range("a51").Offset(0, cnta) = DateValue(getmonth) + 7

  • 输出范围A51是可编辑的。
  • 输入框的日期格式为MM/DD/YY
  • 应用单元格格dddd, dd-mmm, yyyyA51:A54

答案4

这也可以通过 SEQUENCE 和 FILTER 来实现。

基本上,从所选月份的开始和结束之间的日期序列中,仅筛选出星期几为 6 的日期(默认为星期日为 1):

为了简化公式,我创建了一些辅助单元格(也命名):

开始日期:

=DATE(2020,mth,1)

结束日期(名为 eomonth):

=EOMONTH(startdate,0)

天:

=eomonth-startdate+1

最后返回日期的公式:

=FILTER(SEQUENCE(days,1,startdate,1),WEEKDAY(SEQUENCE(days,1,startdate,1))=6)

在此处输入图片描述

不难看出,您可以参数化所选择的日期(因此,在 FILTER 函数末尾不可以使用 6,而是可以引用某个单元格,或者进行查找,以便用户可以选择他们想要的日期)。

类似地,为了避免使用辅助单元格,您可以使用上面显示的适当公式替换 FILTER 函数中的每个单元格名称(即天数和开始日期)。

LET当该功能广泛可用时,这一切都将变得简单得多。您可以阅读更多有关该功能的信息这里

相关内容