范围内的数据
B1:I1
来自以下公式:=SEQUENCE(,8,DATE(2025,1,25),7)
。完整公式可能从 2024 年 12 月 28 日起持续 53 列 - 7 天的间隔为 2025 年每个星期六的开始日期。
A 列中的值是手动输入的(d/m/y格式的变体):
2/2/25-16/2/25, 02/03/2025-16 Mar 25 25/1/25-25/1/25, 15/03/25-15/03/25
问题:
我想要做的是按顺序对 A 列中日期范围涵盖的每个星期进行编号,除非存在六周的间隔,在这种情况下编号应该再次从 1 开始。
此公式会将单元格中的值转换A2
为实际日期: =DATEVALUE(TEXTSPLIT(CLEAN(A2),"-",","))
或者这将返回一周的星期六的开始和星期五的结束:
=LET(AllDates,DATEVALUE(TEXTSPLIT(CLEAN(A2),"-",",")),
StartDates,CHOOSECOLS(AllDates,1)+1-WEEKDAY(CHOOSECOLS(AllDates,1)+1,1),
EndDates,CHOOSECOLS(AllDates,2)+1-WEEKDAY(CHOOSECOLS(AllDates,2)+1,1)+6,
HSTACK(StartDates,EndDates))
该公式=BYCOL($B$1#,LAMBDA(ThisDate,IF(AND(ThisDate>=$A5,ThisDate<=$B5),1,"")))
会在一组日期的正确星期下添加 1。这里A5
和B5
是我的日期公式返回的前两个日期。
我无法将所有内容都放到一个整齐的公式中,更不用说连续编号了。如果我可以添加公式B2
并拖拽,那就太好了。
欢迎任何建议。
我相信这应该可行。将此 LAMBDA 函数保存在高级公式环境中的工作簿模块中。
然后像这样使用它:
请注意,在我的语言环境中,日期是根据 mm/dd/yyyy 解析的。因此,我更改了 A 列中的原始文本以适应这种情况,从而避免不必要地摆弄您的 DATEVALUE 公式。
无论语言环境如何,上面定义的函数都应该可以工作。
另一种可能的方法:
这首先采用您拆分日期的版本,
A2
并将开始日期s
和结束e
日期划分为数组。接下来 BYROW 检查星期六是否s
等于或小于星期序列的开始日期B1#
,以及是否等于但大于数组中的开始日期e
,并对结果求和(结果为1
(TRUE) 或0
(FALSE))。接下来我们用 SCAN 来累计这些按行的结果。并且只显示按行结果中大于 0 的值。
如果同一周内可能存在重叠值,请使用
SCAN(,SIGN(x),SUM)
有趣的事实:我
=DATE(2025,1,SEQUENCE(,8,25,7))
曾经B1#
编辑:包括6个逻辑的差距: