excel - 根据里程碑/任务/子任务创建动态编号列表

标签 excel list excel-formula project

我想创建一个基于公式的数字列表,具体取决于行项目是否被分类为里程碑、任务或子任务。

手动输出如下所示:

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)))))

请注意,这指的是其上方的行,因此它至少需要从第二行开始。

enter image description here

关于excel - 根据里程碑/任务/子任务创建动态编号列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75726467/

相关文章:

Excel 查找列中的下一个值

json - 使用 VBA-JSON 从 API "error: object does not support this property or method here"中提取?

excel - 在Excel中生成真值表

java - 在包含日期的对象列表中搜索

python - 返回列表中最长单词的 len

Excel 在不同时间之间返回同一范围内的不同值

excel - 如何让Excel公式更易读?

excel - 每月更改名称的工作簿的单元格引用

c# - 自动完成组合框 C#

java - 使用 datastax 从列表类型获取数据时出错