根据紧前作业和后续作业列表,统计后续作业的条目

前言

问:

目前用公式,还没有想到好的方法,不过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吧.

(0)

相关推荐