求可实现指定周范围双标记功能的Excel公式
Excel周范围标记公式实现方案
示例参考数据:
前置假设
以下公式基于通用表格结构设置,可根据你的实际列位置调整参数:
- 表格首行为表头,有效数据从第2行开始
- A列为连续无断档的
Week(周数)列 - B列为
Month(月份)列,同自然月的行取值完全一致 - C列为
Flag 1结果列,D列为Flag 2结果列
Flag 1 公式实现
实现逻辑:定位当前月份首次出现的行,计算新月开始后满8周的对应位置标记1。
C2单元格输入以下公式,向下填充即可:=IF(A2=INDEX(A:A,MATCH(B2,B:B,0))+7,1,0)
逻辑说明:
MATCH(B2,B:B,0):定位当前行月份在整列第一次出现的行号,即新月开始的第一行INDEX(A:A,行号):取出该新月第一行对应的周数- 新月第一周周数+7的位置刚好是满8周的节点,符合条件则返回1,否则返回0
如果使用Excel 365/2021版本,可直接在C2输入溢出公式,无需手动下拉:=BYROW(B2:B1000,LAMBDA(m,IF(A2=INDEX(A:A,MATCH(m,B:B,0))+7,1,0)))
Flag 2 公式实现
实现逻辑:找到当前行上方最近的Flag 1标记位,之后每间隔2周标记1。
D2单元格输入以下公式,向下填充即可,兼容所有Excel版本:=IFERROR(IF(MOD(A2 - LOOKUP(2,1/(C$1:C1=1),A$1:A1),2)=0,1,0),0)
逻辑说明:
LOOKUP(2,1/(C$1:C1=1),A$1:A1):查找当前行上方最近一个Flag 1为1的行对应的周数- 用当前周数减去上述Flag 1的周数,模2结果为0即刚好间隔N个2周,符合条件返回1
- 外层IFERROR捕获还未出现第一个Flag 1的情况,直接返回0
如果使用支持XLOOKUP的Excel版本,可替换为更易读的写法:=IFERROR(IF(MOD(A2 - XLOOKUP(1,C$1:C1,A$1:A1,"",0,-1),2)=0,1,0),0)
适配调整说明
如果你的周数存在断档,可将公式中所有对A列(周数)的引用替换为ROW()函数,用行号差替代周数差即可正常运行。
内容的提问来源于stack exchange,提问作者Peter_07
相关产品推荐
相关产品推荐


