Ich bin neu in Excel-Makros und VBA und habe mit dem folgenden Problem gekämpft. Ich habe die folgende Datensatz in Excel:So füllen Sie den obersten übergeordneten Knoten/Stammknoten neben einem untergeordneten Knoten in Excel mithilfe von VBA
Parent Child
AAA BBB
AAA CCC
AAA DDD
BBB EEE
BBB FFF
CCC GGG
FFF HHH
III JJJ
JJJ KKK
JJJ LLL
Ich wünsche den Kind-Knoten mit ihren jeweiligen höchsten Ebene Wurzeln Knoten zu füllen, so dass alle untergeordneten Knoten haben einen Root-Ebene Daten/Eltern ihnen abgebildet etwas wie folgt aus:
Ich habe versucht, eine VB-Funktion zu erstellen, um einen Baum zu erstellen, aber ich bin nicht in der Lage, es von dort zu übernehmen, um die Wurzel der letzten oder höchsten Ebene zu den jeweiligen Kindknoten zu bevölkern.
Ich habe auch versucht, Logik wie Suchen nach eindeutigen Kindnamen und Backtracking zu verwenden, um den Masterstamm zu finden, aber nicht dazu in der Lage.
VB-Code:
Sub MakeTree()
Dim r As Integer
For r = 1 To Range("Data").Rows.Count
If Range("Data").Cells(r, 1) = "Root" Then
DrawNode Range("Data").Cells(r, 2), 0, 0
End If
Next
End Sub
Sub DrawNode(ByRef header As String, ByRef row As Integer, ByRef depth As Integer)
Cells(Range("Destination").row + row, Range("Destination").Column + depth) = header
Dim r As Integer
For r = 1 To Range("Data").Rows.Count
If Range("Data").Cells(r, 1) = header Then
row = row + 1
DrawNode Range("Data").Cells(r, 2), row, depth + 1
End If
Next
End Sub
Wie kann ich voran gehen und das gleiche tun.
unter der Annahme, dass es eine sortierte Liste, würde ich ein Wörterbuch verwenden. Verwenden Sie untergeordnete Knoten als Schlüssel und übergeordnete Knoten als Wert. Bei jeder Iteration wird geprüft, ob der Elternwert im Kindwörterbuch als Schlüssel vorhanden ist. Wenn ja, ersetzen Sie den Wert durch diesen Wert. – cyboashu
Ich denke, die Ergebnisdaten, die Sie in Ihre Frage eingegeben haben, erklären es nicht richtig. Wie 'KKK' root ist' JJJ', aber es zeigt 'III', ähnlich' BBB' sollte 'Root' nicht' AAA' sein. Können Sie ein richtiges Beispiel geben –
Hallo. Ich habe die Elternwurzeln AAA und III entfernt. Aber KKK root ist III nicht JJJ. Es muss auf den Knoten der höchsten Ebene verschoben werden. Ein Knoten, der kein Parent oder Parent als "Root" hat, ist die höchste Ebene. –