【发布时间】:2021-08-10 13:59:03
【问题描述】:
在我的 Excel 工作表的 A 列中,我试图根据 C 列中的“活动类型”在每一行中创建一个唯一的、连续的 ID。Activity Title 在 B 列中,但是这两个相关列例如 A 列和 C 列。共有三种活动类型:Milestones、Tasks 和 Subtasks。
这看起来很简单,但为了确保我提供了所有相关细节,“里程碑”就像一部敏捷史诗 - 它是最大的工作体,可以有多个任务和子任务与之对齐。 “任务”就像一个敏捷特性——一个“任务”可以有多个与其对齐的子任务。最后,“子任务”就像一个敏捷的用户故事——它是最小的工作体,不会有任何与之对齐的东西(或在它下面)。
对于属于一个里程碑的“任务”的数量也没有限制或模式,对于属于一个“任务”的“子任务”的数量也没有限制或模式。理想情况下,我希望以以下格式自动生成 ID:
| ID (ColA) | Activity Type (Col C) |
|---|---|
| 1 | Milestone |
| 1.1 | Task |
| 1.2 | Task |
| 1.21 | Subtask |
| 1.22 | Subtask |
| 1.3 | Task |
| 1.31 | Subtask |
| 2 | Milestone |
| 2.1 | Task |
| 2.11 | Subtask |
| 2.12 | Subtask |
| 2.13 | Subtask |
| 2.2 | Task |
| 2.21 | Subtask |
我应该提到,我已经在 VBA 中有一些代码可以根据活动类型自动缩进 B 列(活动名称)和 C 列(活动类型)中的数据。该代码包含在下面:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrHandler
If Intersect(Target, Range("C:C")) Is Nothing Then Exit Sub
If Target = "Task" Then
Target.IndentLevel = 1
Target.Offset(0, -1).IndentLevel = 1
ElseIf Target = "Subtask" Then
Target.IndentLevel = 2
Target.Offset(0, -1).IndentLevel = 2
End If
ErrHandler:
End Sub
非常感谢您提供的任何和所有帮助 - 提前致谢!
【问题讨论】:
-
2.22和1.23不应该是2.12和2.13吗?您的问题中有错别字? -
C 列实际上是否列为里程碑、任务、子任务?或者这些是任务的实际名称等等?试图了解这里的信息类型以及我们是否可以使用它来创建 ID。现在,我认为我们可以使用一些数学运算,例如 IF ColC = "Milestone", x + 1, if ColC = "Task", x + .1 等。
-
公式:放入A2并抄下:
=IFERROR(ROUNDDOWN(A1+1/10^(MATCH(B2,{"Milestone","Task","Subtask"},0)-1),(MATCH(B2,{"Milestone","Task","Subtask"},0)-1)),1) -
BTW,如果任务或子任务的数量没有限制,当任务或子任务的数量超过9个时会发生什么?
-
在大多数情况下,该列被格式化为文本,使用
.表示级别更改:1.2.3第一个里程碑,第二个任务,第三个子任务。那么有多少任务或子任务并不重要。而且以后解析起来也更容易。