AW: Hierarchie Struktur aufbauen
10.07.2020 15:59:44
Richi
Salü Franz
Ich konnte Problem lösen mit Replace
. siehe meine Einträge.
Ganz herzlichen Dank für deine Bemühungen.
Schönes Weekend
Richi
Sub Hierarchie2()
Dim wksQ As Worksheet
Dim ZeiQ As Long, ZeiQ1 As Long, zei1 As Long, zei2 As Long, zeiQL As Long
Dim wksZ As Worksheet
Dim ZeiZ As Long
Dim strFloc As String
Dim strHierarchie As String, bolH As Boolean
Dim varNHA, varEqui
Dim arrData, arrH() As String
Set wksQ = ActiveWorkbook.Worksheets("Tabelle1") 'Blatt mit Ausgangsliste
Set wksZ = ActiveWorkbook.Worksheets("Hierarchie") 'Blatt f?r Hierarchie
With wksZ
ZeiZ = .Cells(.Rows.Count, 1).End(xlUp).Row
If ZeiZ > 1 Then
'Altdaten ggf. l?schen
.Range(.Rows(2), .Rows(ZeiZ)).Clear
End If
End With
With wksQ
'Zeile mit Spaltentitel in Ausgangsliste
ZeiQ = 1
zei1 = ZeiQ + 1 'Zeile mit 1. Hierarchie
'letzte zeile in Ausgangsliste
zeiQL = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'Daten der Spalte A bis C in Array laden
arrData = .Range(.Cells(1, 1), .Cells(zeiQL, 3))
ZeiZ = zei1 'Startzeile f?r Ergebnis-Array
'Ergebnis-Array dimensionieren
ReDim arrH(zei1 To zeiQL, 1 To 1)
Do
strFloc = arrData(zei1, 1) '1. Floc merken
zei2 = zei1
Do
'letzte Zeile mit gleicher Floc suchen
If arrData(zei2 + 1, 1) strFloc Then
Do
'Zeilen im Block abarbeiten
ZeiQ = ZeiQ + 1
If ZeiQ > zeiQL Then Exit Do
varNHA = arrData(ZeiQ, 2)
varEqui = arrData(ZeiQ, 3)
If IsEmpty(varNHA) Or varNHA = "" Then 'ge?nderte Zeile 2020-07-10 fcs
strHierarchie = varEqui 'ge?nderte Zeile 2020-07-09 fcs
strHierarchie = Replace(strHierarchie, ";;", ";") 'Replace
Else
strHierarchie = varNHA & ";" & varEqui
strHierarchie = Replace(strHierarchie, ";;", ";") 'Replace
'Iterativ pr?fen, ob NHA in Equi vorkommt und Ergebnis zusammenstellen
Do
bolH = False 'Merker, das keine ?bergeordnete Hierarchie mehr _
vorhanden
For ZeiQ1 = zei1 To zei2
varEqui = arrData(ZeiQ1, 3)
If varNHA = varEqui And Not IsEmpty(arrData(ZeiQ1, 2)) Then
varNHA = arrData(ZeiQ1, 2)
strHierarchie = varNHA & ";" & strHierarchie
strHierarchie = Replace(strHierarchie, ";;", ";") ' _
Replace
bolH = True '?bergeordnete Hierarchie vorhanden
Exit For
End If
Next
If bolH = False Then Exit Do
Loop
End If
'Floc an Anfang des Ergebnissses stellen
strHierarchie = strFloc & ";" & strHierarchie
strHierarchie = Replace(strHierarchie, ";;", ";") 'Replace
'Ergebnis eintragen
arrH(ZeiZ, 1) = strHierarchie
'n?chste Zielzeile setzen
ZeiZ = ZeiZ + 1
Loop Until ZeiQ = zei2 'letzte Zeile des Floc-Blocks erreicht
zei1 = zei2 + 1
Exit Do 'n?chsten Floc-Block abarbeiten
End If
zei2 = zei2 + 1
Loop
Loop Until zei1 = zeiQL 'letzte Zeile des letzten Floc-Blocks erreicht
End With
With wksZ
Application.ScreenUpdating = False
'Ergebnis-Array in Zieltabelle eintragen
.Cells(2, 1).Resize(UBound(arrH) - LBound(arrH) + 1, 1) = arrH
'letzte Zeile
ZeiZ = .Cells(.Rows.Count, 1).End(xlUp).Row
'in Spalte A eingetragene Ergebnisse am ";" in Spalten aufteilen
Dim iK As Integer
'ge?nderter Code zum Slitten des Textes in Spalten 2020-07-09 fcs
'Format f?r Text in Spalten aufteilen
iK = 2 '1 = Standard (Excel legt fest), 2 = Text
.Range(.Cells(2, 1), .Cells(ZeiZ, 1)).TextToColumns Destination:=.Range("A2"), _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, _
FieldInfo:=Array(Array(1, iK), Array(2, iK), Array(3, iK), Array(4, iK), _
Array(5, iK), Array(6, iK), Array(7, iK), Array(8, iK), Array(9, iK), _
Array(10, iK), Array(11, iK), Array(12, iK)), _
TrailingMinusNumbers:=True
Application.ScreenUpdating = True
End With
End Sub