在 EXCEL 中创建动态分层编号。满足特定条件后重置计数
Creating a dynamic hierarchical numbering in EXCEL. Reset the count after certain criteria is met
我正在尝试创建具有动态分层编号的甘特图 sheet。图表的设置是这样的:
The set up and what is currently achieved
使用的公式:
B栏=D13&"."&E13&"."&F13&"."&G13
D栏=IF(tipas<>"", IF(ROW(ps.nr)=ROW($D)+4,1,IF(tipas="R","",IF(tipas="PS",MAX(prev.col.range)+1, MAX(prev.col.range)))),"")
E栏=IF(tipas<>"", IF(OR(tipas="PS", tipas="R"),"",IF(ROW(s.nr)=ROW($E)+4,1,IF(tipas="S",MAX(prev.col.range)+1, MAX(prev.col.range)))),-1)
F栏=IF(tipas<>"", IF(OR(tipas="PS",tipas="S",tipas="R"),"",IF(ROW(d.nr)=ROW($F)+4,1,IF(OR(tipas="D",tipas="DG",tipas="M"),MAX(prev.col.range)+1, MAX(prev.col.range)))),-1)
G 列 当前与 F
相同
Explaining for formulas:
"Tipas" is a named range reffering to current row H column
"ps.nr", "s.nr", "dg.nr", "d.nr" are named ranges for current row
number
"prev.col.range" is a named range getting range from header row
until current row
就图表类型(“tipas”H 列)按完美顺序设置而言 PS 然后是 S 和 D 然后它工作得很好。
当我尝试实现动态部分时,问题就开始了。例如,如果我在中间的任何地方将类型更改为 S,并且在它之前有任务(类型 D),则计数集关闭并且编号丢失。
Illustration of what I'm trying to achieve
主要问题是:
如果H列的值为PS或S,如何重置F列的编号,如果值为DG,如何停止添加数字?
仅当 H 列的值为 DG 时,G 列才应开始计数,如果不是 DG,则应停止并重置。
将这个公式输入F13:
=IF(H13<>"",IF(OR(H13="PS",H13="S",H13="R"),"",IF(ROW(H13)=ROW($F)+4,1,IF(G13="",IF(OR(H13="D",H13="DG",H13="M"),MAX(INDIRECT("F"&AGGREGATE(14,6,1/(($H:H13="PS")+($H:H13="S"))*ROW($H:H13),1)&":"&CELL("address",F12)))+1,MAX(INDIRECT("F"&AGGREGATE(14,6,1/(($H:H13="PS")+($H:H13="S"))*ROW($H:H13),1)&":"&CELL("address",F12)))),F12))),-1)
G13中的这个:
=IF(AND(OR(H12="DG",G12<>""),OR(H13="D",H13="M")),IF(H13="R","",IF(G12="",1,G12+1)),"")
他们应该 returns 你所期望的(只要你提供的数据可以保证)。测试并发送反馈。欢迎 errors/misfunctions 的 and/or 报告提出问题,很可能会得到解决。
我正在尝试创建具有动态分层编号的甘特图 sheet。图表的设置是这样的:
The set up and what is currently achieved
使用的公式:
B栏=D13&"."&E13&"."&F13&"."&G13
D栏=IF(tipas<>"", IF(ROW(ps.nr)=ROW($D)+4,1,IF(tipas="R","",IF(tipas="PS",MAX(prev.col.range)+1, MAX(prev.col.range)))),"")
E栏=IF(tipas<>"", IF(OR(tipas="PS", tipas="R"),"",IF(ROW(s.nr)=ROW($E)+4,1,IF(tipas="S",MAX(prev.col.range)+1, MAX(prev.col.range)))),-1)
F栏=IF(tipas<>"", IF(OR(tipas="PS",tipas="S",tipas="R"),"",IF(ROW(d.nr)=ROW($F)+4,1,IF(OR(tipas="D",tipas="DG",tipas="M"),MAX(prev.col.range)+1, MAX(prev.col.range)))),-1)
G 列 当前与 F
相同Explaining for formulas:
"Tipas" is a named range reffering to current row H column
"ps.nr", "s.nr", "dg.nr", "d.nr" are named ranges for current row number
"prev.col.range" is a named range getting range from header row until current row
就图表类型(“tipas”H 列)按完美顺序设置而言 PS 然后是 S 和 D 然后它工作得很好。
当我尝试实现动态部分时,问题就开始了。例如,如果我在中间的任何地方将类型更改为 S,并且在它之前有任务(类型 D),则计数集关闭并且编号丢失。
Illustration of what I'm trying to achieve
主要问题是:
如果H列的值为PS或S,如何重置F列的编号,如果值为DG,如何停止添加数字? 仅当 H 列的值为 DG 时,G 列才应开始计数,如果不是 DG,则应停止并重置。
将这个公式输入F13:
=IF(H13<>"",IF(OR(H13="PS",H13="S",H13="R"),"",IF(ROW(H13)=ROW($F)+4,1,IF(G13="",IF(OR(H13="D",H13="DG",H13="M"),MAX(INDIRECT("F"&AGGREGATE(14,6,1/(($H:H13="PS")+($H:H13="S"))*ROW($H:H13),1)&":"&CELL("address",F12)))+1,MAX(INDIRECT("F"&AGGREGATE(14,6,1/(($H:H13="PS")+($H:H13="S"))*ROW($H:H13),1)&":"&CELL("address",F12)))),F12))),-1)
G13中的这个:
=IF(AND(OR(H12="DG",G12<>""),OR(H13="D",H13="M")),IF(H13="R","",IF(G12="",1,G12+1)),"")
他们应该 returns 你所期望的(只要你提供的数据可以保证)。测试并发送反馈。欢迎 errors/misfunctions 的 and/or 报告提出问题,很可能会得到解决。