【发布时间】:2018-08-24 21:21:43
【问题描述】:
我有以下输入和输出数据(Sheet1 从 1-19,Sheet2 从 21+,然后是输出) https://ethercalc.org/bzrwyz8bsail(请注意,孩子们向右对齐,而不是脚本格式的 2 个空格)
我有以下 VBA 脚本,它解析父母和项目并写入工作表 2:
Sub newlist()
Dim w1 As Worksheet
Dim w2 As Worksheet
Dim Ide As String
Dim k As Long
Dim kk As Long
Dim n As Long
Dim entity As String
Set w1 = Sheets("Sheet1")
Set w2 = Sheets("Sheet2")
w2.Cells(1, 1).Value = w1.Cells(1, 8).Value
w2.Cells(1, 2).Value = w1.Cells(1, 10).Value
c = 0
Ide = Cells(1, 1).Value
w1.Activate
n = Cells(Rows.Count, 1).End(xlUp).row
k = 3
kk = 1
For i = 2 To n
If w1.Cells(i, 8).Value = Ide Then
entity= w1.Cells(i, 10).Value
entityString = " " & entity
w2.Cells(kk + 1, 1).Value = entityString
kk = kk + 1
k = k + 1
Else
kk = kk + 1
k = 3
Ide = w1.Cells(i, 8).Value
entity= w1.Cells(i, 10).Value
w2.Cells(kk, 1).Value = Ide
kk = kk + 1
entityString = " " & entity
w2.Cells(kk, 1).Value = entityString
End If
Next
End Sub
从输出中可以看出,自己是孩子的父母并没有写在他们的父母之下。例如,第一个爸爸的孩子应该写在根的孩子爸爸下面,名字不能重复两次。另一个例子是 Echo 的孩子应该如何在 Echo 之下,而不是被重复。
我将如何使用递归来处理这个问题?好像迭代没有效果。
【问题讨论】:
-
是的,在 VBA 中可以递归。
-
@QHarr 我不确定如何实现它来解决我的问题,我什至不知道是否可以使用递归来做我正在做的事情
-
另外,你应该养成声明变量的习惯。您在这段代码中没有声明它们,这使得代码很难遵循,而且效率低下,并且经常由于隐式转换导致类型不匹配错误。
-
@DavidZemens 我没有意识到 VBA 可以有这些技术细节,谢谢你的建议,我会更新帖子。