我有个问题,如何列出给定月份中所有星期五的日期?有些月份有 5 个星期五,有些月份有 4 个星期五。
2020 年 5 月,例如 A1=01/May/2020,结果应在 B1:B5 中显示为 01/May、08/May、15/May、22/May、29/May
感谢您花时间帮助我。
答案1
答案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, yyyy
式A51: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
当该功能广泛可用时,这一切都将变得简单得多。您可以阅读更多有关该功能的信息这里。