根据紧前作业和后续作业列表,统计后续作业的条目
前言
问:
目前用公式,还没有想到好的方法,不过VBA倒可以试一试
这是一个典型的递归遍历算法,好长时间没有写过了递归程序了,今天不妨试一下.
思路
大体的思路应该是首先找到A,然后找第一个后续作业B,在顺着B往下找,找到第一个后续作业D,然后找到第一个后续作业H
,找到末尾,再返回最后一个节点D的地方,依次查找第二个后续作业I,然后依次遍历每一个节点,如下图所示
我们可以试着把A作业的所有直接和间接后续作业全部串起来,最后统计一下个数就可以了.
实操
下面为我写的代码,估计还有优化的空间,代码是基于A1:B9区域的数据写的
‘主程序
Public M, N, Rownumber
Sub MAIN()
Range("E1:Z10000").ClearContents
Father = InputBox("请输入紧前作业名称")
Rownumber = Int(InputBox("请输入数据的最后一行的行号"))
M = 1
N = 5
Children (Father)
MsgBox Father & "的后续作业共有" & WorksheetFunction.CountA(Range("E1:Z10000"))& "个"
End Sub
‘子程序
Sub Children(t As String)
For I = 2 To Rownumber
If Cells(I, 1) = t Then
N = N + 1
Cells(M, N) = Cells(I, 1).Offset(0, 1)
Children (Cells(M, N))
M = M + 1
End If
Next
N = N - 1
End Sub
在工作表中插入按钮,命名为”计算后序任务的个数”
将按钮指定宏,选择刚才的主程序:MAIN,确定.
点击按钮,运行宏,依次弹出,请输入紧前作业的名称,我们可以填入”A”,确定
接下来,弹出:请输入数的最后一行的行号,我们可以填入9,确定
弹出,后续任务列表和统计个数
总结
公式不好解决的问题,就交给VBA吧.