我想创建一个基于公式的数字列表,具体取决于行项目是否被分类为里程碑、任务或子任务。
手动输出如下所示:
1 Milestone
1.1 Task
1.1.1 Subtask
公式需要足够动态,以处理存在多个任务(但没有子任务)的情况或创建大量子任务并创建新任务的情况。下面的例子
1 Milestone
1.1 Task
1.2 Task
1.3 Task
1.3.1 Subtask
1.3.2 Subtask
1.3.3 Subtask
1.4 Task
2 Milestone
我尝试了以下方法,尝试解释值何时高于 10:
=IF(B10="milestone",IF(A9<10,LEFT(A9)+1,LEFT(A9,2)+1),IF(B10="Task",IF(B9="Milestone",A9+0.1,IF(B9="subtask",IF(LEFT(A9,1)<=9,A9+0.1,LEFT(A9,4)+0.1),A9+0.1)),IF(B10="subtask",IF(B9="subTask",IF(NUMBERVALUE(LEFT(A9,1))<=9,LEFT(A9,4)&RIGHT(A9,1)+1,0),A9&"."&1))))
我也尝试过:
=IF(B39="milestone",IF(A38<10,LEFT(A38)+1,LEFT(A38,2)+1),IF(B39="Task",IF(B38="Milestone",A38+0.1,IF(B38="subtask",IF(LEFT(A38,1)<=9,A38+0.1,LEFT(A38,4)+0.1),A38+0.1)),IF(B39="subtask",IF(B38="Task",IF(A38<=9,LEFT(A38,4)&"."&1,LEFT(A38,5)&"."&1),LEFT(A38,5)&RIGHT(A38,1)+1))))
在这两种情况下我都遇到了#Value!错误。
最佳答案
通过 Office 365 Excel,我们可以使用 TEXTSPLIT 和 TEXTJOIN 进行拆分和重新组合。借助 BYCOL,我们可以只更改我们想要的内容:
=LET(
tp,B2,
ref,A1,
clms,MATCH(tp,{"Milestone","Task","Subtask"},0),
TEXTJOIN(".",TRUE,BYCOL(SEQUENCE(,clms),LAMBDA(a,IFERROR(INDEX(TEXTSPLIT(ref,"."),0,a)+0,0)+IF(a=clms,1,0)))))
请注意,这指的是其上方的行,因此它至少需要从第二行开始。
关于excel - 根据里程碑/任务/子任务创建动态编号列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75726467/