Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Hierarchie Struktur aufbauen

Forumthread: Hierarchie Struktur aufbauen

Hierarchie Struktur aufbauen
06.07.2020 18:58:31
Richi
Guten Tag
Kann mir jemand helfen beim Aufbau einer Equipment-Hierarchie?
Ausgangslage:
Floc = Produkt
NHA = Hext Higer Equipment (kann mehrere Male vorkommen und referenziert immer das nächst höhere Einzelteil)
Equi = Einzelteil (Unique Teilenummer)
Aufgrund des Equipment und der NHA möchte ich herausfinden in welcher Hierarchiestufe ein Einzelteil eingebaut ist ( Hierarchie)
Als Einstig nach Floc sind die Einzelteile welche keinen Eintrag auf NHA hinterlegt haben)
Die Teile in der Hierarchie-Stufe 1 konnte ich lösen, jedoch die suche über alle Hierarchistufen über NHA finde ich den einstieg nicht, wie ich die Teile in die richtige ebene bringe und die vorhergehenden spalten abfüllen kann.
Beispiel:
https://www.herber.de/bbs/user/138795.xlsx
Mein Code:
Sub Hierarchie()
Dim wb As Workbook
Dim wsQ As Worksheet
Dim wsZ As Worksheet
Dim i As Integer
Dim a As Integer
Dim lzQ As Long
Set wb = ThisWorkbook
Set wsQ = wb.Worksheets("Tabelle1")
Set wsZ = wb.Worksheets("Tabelle4")
lzQ = wsQ.Cells(wsQ.Rows.Count, "A").End(xlUp).Row              'Letzte Zeile Quelle
With wsQ
For i = 2 To lzQ                                            'Ab Zeile 2 bis letzte  _
Zeile
wsZ.Cells(i, 1) = wsQ.Cells(i, 1)                         'Produkte Name in Spalte  _
Floc schreiben
If wsQ.Cells(i, 2) = "" Then                            'Wenn NHA leer dann in  _
Spalte Hier01 Equipment schreiben
wsZ.Cells(i, 2) = wsQ.Cells(i, 3)
End If
Next i
End With
End Sub

Anzeige

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hierarchie Struktur aufbauen
06.07.2020 20:12:49
onur
Und wieso kommt Floc mehrmals vor?
AW: Hierarchie Struktur aufbauen
06.07.2020 21:27:53
Richi
Das ist das Produkt. Z.B. ein Fahrradtyp. Diese werden mit Equis den Einzelteilen bestückt. Fahrrad besteht aus mehreren Komponenten welche hier als NHA hinterlegt sind. Diese wiederum sind wieder mit diverse Einzelteilen bestückt.
Das ganze Konstrukt wiederspiegelt eine Explosionszeichnung mit vielen Einzelteilen die im ganzen ein Fahrradtyp ergeben.
Anzeige
AW: Hierarchie Struktur aufbauen
06.07.2020 21:39:57
onur
Sind die Daten (bzw Datenstruktur) denn so vorgegeben?
Ich kenne nur sowas:
1.1.1.100 ; 1.2.1 ; 1.3.1 usw
oder mit Unterebenen-Strukturen (wie bei SAP) Ebene 10, 20 usw.
Aber diese Art Datenstruktur bzw Hierarchie ist recht unübersichtlich.
AW: Hierarchie Struktur aufbauen
06.07.2020 21:50:33
Richi
Es entspricht dem SAP Equipmentstamm Equipments sind10 Stellige einmalig vorkommende Nummern. Das Oberste Teil ist die Floc = Functional Location. Unter dieser Floc werden Euipments installiert. Diese können ineinander verschachtelt werden. Wird ein Equipment in ein anderes Equipment verbaut so wird das übergeordnete Equipment als NHA Equipment hinterlegt. NHA = Next Higher Equipment.
Anzeige
AW: Hierarchie Struktur aufbauen
06.07.2020 21:50:34
Richi
Es entspricht dem SAP Equipmentstamm Equipments sind10 Stellige einmalig vorkommende Nummern. Das Oberste Teil ist die Floc = Functional Location. Unter dieser Floc werden Euipments installiert. Diese können ineinander verschachtelt werden. Wird ein Equipment in ein anderes Equipment verbaut so wird das übergeordnete Equipment als NHA Equipment hinterlegt. NHA = Next Higher Equipment.
Anzeige
AW: Hierarchie Struktur aufbauen
06.07.2020 21:53:44
Richi
Nein die sind so nicht vergeben in der SAP Instandhaltung
AW: Hierarchie Struktur aufbauen
06.07.2020 22:02:49
onur
Wie gesagt, ich kenne von SAP nur sowas:
Artikel Art-Nr Ebene Pos
XYZ 10000 1 10
XYZA 11111 2 10
XYZB 11112 2 20
XYZC 11113 2 30
XYZD 11114 3 10
XYZE 11115 3 20
XYZF 11116 2 10
AW: Hierarchie Struktur aufbauen
06.07.2020 22:17:47
Richi
Ja das gibt es auch im SAP Modul SD. Sogenannte SD Aufträge welche mit Positionen bestückt werden können zwecks Kontierungen. Daran können 1:n Aufträge hinterlegt werden. In meinem Fall suche ich die Lösung zu Teilestrukturen. Man könnte es inetwa so vergleichen: Floc = Artikel, NHA = Ebene, Equi = Pos. Mit dem Unterschied, das die Equi Nummern vom System automatisch vergeben werden. An den Equipments werden Zählerstände, Instanhaltungslimiten etc. hinterlegt um Wartungsintervalle sicherstellen zu können. UNter NHA können 1:n Equi's hinterlegt sein. Ich möchte diese miteinander verbinden ähnlich wie die Folderstruktur des Windows Explores
Anzeige
AW: Hierarchie Struktur aufbauen
06.07.2020 22:45:53
Richi
Ich glaube, dass die Hierarchien (10 Stufen) ineinander verschachtelt werden müssen. Suchkriterium ist NHA Spalte. Dessen Inhalt muss unter Equi gefunden werden und in die entsprechende "Hierxx" geschrieben werden. Ich weiss nicht wie dieser Code aufgebaut werden muss.
AW: Hierarchie Struktur aufbauen
07.07.2020 22:50:52
Richi
Habe mir den Code zusammengestellt und es läuft. Bei mehr als 10000 Datensätze dauert es eine Ewigkeit bis das Programm durch ist. Kann mir jemand helfen den Code zu optimieren?
Option Explicit
Sub Hierarchie()
Dim wb As Workbook
Dim wsQ As Worksheet
Dim wsZ As Worksheet
Dim i As Integer
Dim a As Integer
Dim H10 As Integer
Dim H09 As Integer
Dim H08 As Integer
Dim H07 As Integer
Dim H06 As Integer
Dim H05 As Integer
Dim H04 As Integer
Dim H03 As Integer
Dim H02 As Integer
Dim H01 As Integer
Dim var09 As Long
Dim var08 As Long
Dim var07 As Long
Dim var06 As Long
Dim var05 As Long
Dim var04 As Long
Dim var03 As Long
Dim var02 As Long
Dim var01 As Long
Dim Equi As Long
Dim lzQ As Long                                                 'Variable Letzte Zeile
Dim rng As Range                                                'VAriableRange Suche
Set wb = ThisWorkbook
Set wsQ = wb.Worksheets("Tabelle1")
Set wsZ = wb.Worksheets("Hierarchie")
lzQ = wsQ.Cells(wsQ.Rows.Count, "A").End(xlUp).Row              'Letzte Zeile Quelle
Set rng = Range(Cells(2, 2), Cells(lzQ, 2))                     'Suchrange
'================================== Hierarchiestufe 9 & 10  ==== in Hierarchiestufe 10 alle  _
Equis und Hierarchiestufe 9 alle NHA Equis schreiben ==================================
With wsQ
For i = 2 To lzQ                                            'Ab Zeile 2 bis letzte  _
Zeile
wsZ.Cells(i, 1) = wsQ.Cells(i, 1)                       'Floc in Spalte A schreiben
wsZ.Cells(i, 11) = wsQ.Cells(i, 3)                  'Alle Equis in  _
Hierarchiestufe 10 schreiben
If wsQ.Cells(i, 2)  "" Then                           'Wenn NHA nicht leer ist  _
dann in Spalte Hierarchie 9 Equipment schreiben
wsZ.Cells(i, 11) = wsQ.Cells(i, 3)                  'Alle Equis in  _
Hierarchiestufe 10 schreiben                  '
wsZ.Cells(i, 10) = wsQ.Cells(i, 2)                  'Equis mit NHA NHA Equis in  _
Hierarchiestufe 9 schreiben
End If
Next i
End With
'================================== Hierarchiestufe 8 ==== alle Equis mit Eintrag in  _
Hierarchiestufe 9 Equis in Hierarchiestufe 10 suchen ==================================
For H09 = 2 To lzQ                                              '1. Loop
var09 = Range("J" & H09).Value                              'Equi Nummer in von jeder  _
Zelle in Hierarchie 9 lesen bis letzte Zeile
For H10 = 2 To lzQ                                          '2.Loop
Equi = Range("K" & H10).Value                           'Equi Nummer in von jeder  _
Zelle in Hierearchie 10 (Basis)lesen bis letzte Zeile
If var09 = Equi Then                                    'Equi Nummer vergeleichen  _
Hierarchie 9 mit Hierarchie 10
If wsZ.Cells(H09, 10) = "" Then                     'Kein Eintrag in  _
Hierarchiestufe 9 nichts machen
End If
If wsZ.Cells(H09, 10)  "" Then                        'Equi aus Hierarchiestufe 9  _
und 10 sind gleich
wsZ.Cells(H09, 9) = wsZ.Cells(H10, 10)              'In Zelle Hierarchiestufe 8  _
Equi aus Hierarchiestufe 9 (Adresse aus 2. Loop) schreiben
End If
End If
Next H10
H10 = 2                                                     'Zähler von 2. Loop zurü _
ckstellen
Next H09
If wsZ.Cells(wsZ.Rows.Count, "I").End(xlUp).Row = 1 Then        'Letzte Zeile Quelle
Exit 

Sub                                                    'Programm beenden
End If
'================================== Hierarchiestufe 7 ==== alle Equis mit Eintrag in  _
Hierarchiestufe 8 Equis in Hierarchiestufe 10 suchen ==================================
For H08 = 2 To lzQ                                              '1. Loop
var08 = Range("I" & H08).Value                              'Equi Nummer in von jeder  _
Zelle in Hierarchie 8 lesen bis letzte Zeile
For H09 = 2 To lzQ                                          '2.Loop
Equi = Range("K" & H09).Value                           'Equi Nummer in von jeder  _
Zelle in Hierearchie 10(Basis) lesen bis letzte Zeile
If var08 = Equi Then                                    'Equi Nummer vergeleichen  _
Hierarchie 8 mit Hierarchie 9
If wsZ.Cells(H08, 9) = "" Then                      'Kein Eintrag in  _
Hierarchiestufe 8 nichts machen
End If
If wsZ.Cells(H08, 9)  "" Then                         'Equi aus Hierarchiestufe 8  _
und 9 sind gleich
wsZ.Cells(H08, 8) = wsZ.Cells(H09, 10)              'In Zelle Hierarchiestufe 7  _
Equi aus Hierarchiestufe 9 (Adresse aus 2. Loop) schreiben
End If
End If
Next H09
H09 = 2                                                     'Zähler von 2. Loop zurü _
ckstellen
Next H08
If wsZ.Cells(wsZ.Rows.Count, "H").End(xlUp).Row = 1 Then        'Letzte Zeile Quelle
Exit 

Sub                                                    'Programm beenden
End If
'================================== Hierarchiestufe 6 ==== alle Equis mit Eintrag in  _
Hierarchiestufe 7 Equis in Hierarchiestufe 10 suchen ==================================
For H07 = 2 To lzQ                                              '1. Loop
var07 = Range("H" & H07).Value                              'Equi Nummer in von jeder  _
Zelle in Hierarchie 7 lesen bis letzte Zeile
For H08 = 2 To lzQ                                          '2.Loop
Equi = Range("K" & H08).Value                           'Equi Nummer in von jeder  _
Zelle in Hierearchie 10(Basis) lesen bis letzte Zeile
If var07 = Equi Then                                    'Equi Nummer vergeleichen  _
Hierarchie 7 mit Hierarchie 8
If wsZ.Cells(H07, 8) = "" Then                      'Kein Eintrag in  _
Hierarchiestufe 8 nichts machen
End If
If wsZ.Cells(H07, 8)  "" Then                         'Equi aus Hierarchiestufe 7  _
und 8 sind gleich
wsZ.Cells(H07, 7) = wsZ.Cells(H08, 10)              'In Zelle Hierarchiestufe 6  _
Equi aus Hierarchiestufe 9 (Adresse aus 2. Loop) schreiben
End If
End If
Next H08
H08 = 2                                                     'Zähler von 2. Loop zurü _
ckstellen
Next H07
If wsZ.Cells(wsZ.Rows.Count, "G").End(xlUp).Row = 1 Then        'Letzte Zeile Quelle
Exit 

Sub                                                    'Programm beenden
End If
'================================== Hierarchiestufe 5 ==== alle Equis mit Eintrag in  _
Hierarchiestufe 6 Equis in Hierarchiestufe 10 suchen ==================================
For H06 = 2 To lzQ                                              '1. Loop
var06 = Range("G" & H06).Value                              'Equi Nummer in von jeder  _
Zelle in Hierarchie 6 lesen bis letzte Zeile
For H07 = 2 To lzQ                                          '2.Loop
Equi = Range("K" & H07).Value                           'Equi Nummer in von jeder  _
Zelle in Hierearchie 10(Basis) lesen bis letzte Zeile
If var06 = Equi Then                                    'Equi Nummer vergeleichen  _
Hierarchie 6 mit Hierarchie 7
If wsZ.Cells(H06, 7) = "" Then                      'Kein Eintrag in  _
Hierarchiestufe 7 nichts machen
End If
If wsZ.Cells(H06, 7)  "" Then                         'Equi aus Hierarchiestufe 6  _
und 7 sind gleich
wsZ.Cells(H06, 6) = wsZ.Cells(H07, 10)              'In Zelle Hierarchiestufe 5  _
Equi aus Hierarchiestufe 9 (Adresse aus 2. Loop) schreiben
End If
End If
Next H07
H07 = 2                                                     'Zähler von 2. Loop zurü _
ckstellen
Next H06
If wsZ.Cells(wsZ.Rows.Count, "F").End(xlUp).Row = 1 Then        'Letzte Zeile Quelle
Exit 

Sub                                                    'Programm beenden
End If
'================================== Hierarchiestufe 4 ==== alle Equis mit Eintrag in  _
Hierarchiestufe 5 Equis in Hierarchiestufe 10 suchen ==================================
For H05 = 2 To lzQ                                              '1. Loop
var05 = Range("F" & H05).Value                              'Equi Nummer in von jeder  _
Zelle in Hierarchie 5 lesen bis letzte Zeile
For H06 = 2 To lzQ                                          '2.Loop
Equi = Range("K" & H06).Value                           'Equi Nummer in von jeder  _
Zelle in Hierearchie 10(Basis) lesen bis letzte Zeile
If var05 = Equi Then                                    'Equi Nummer vergeleichen  _
Hierarchie 5 mit Hierarchie 6
If wsZ.Cells(H05, 6) = "" Then                      'Kein Eintrag in  _
Hierarchiestufe 6 nichts machen
End If
If wsZ.Cells(H05, 6)  "" Then                         'Equi aus Hierarchiestufe 5  _
und 6 sind gleich
wsZ.Cells(H05, 5) = wsZ.Cells(H06, 10)              'In Zelle Hierarchiestufe 4  _
Equi aus Hierarchiestufe 9 (Adresse aus 2. Loop) schreiben
End If
End If
Next H06
H06 = 2                                                     'Zähler von 2. Loop zurü _
ckstellen
Next H05
If wsZ.Cells(wsZ.Rows.Count, "E").End(xlUp).Row = 1 Then        'Letzte Zeile Quelle
Exit 

Sub                                                    'Programm beenden
End If
'================================== Hierarchiestufe 3 ==== alle Equis mit Eintrag in  _
Hierarchiestufe 4 Equis in Hierarchiestufe 10 suchen ==================================
For H04 = 2 To lzQ                                              '1. Loop
var04 = Range("E" & H04).Value                              'Equi Nummer in von jeder  _
Zelle in Hierarchie 4 lesen bis letzte Zeile
For H05 = 2 To lzQ                                          '2.Loop
Equi = Range("K" & H05).Value                           'Equi Nummer in von jeder  _
Zelle in Hierearchie 10(Basis) lesen bis letzte Zeile
If var04 = Equi Then                                    'Equi Nummer vergeleichen  _
Hierarchie 4 mit Hierarchie 5
If wsZ.Cells(H04, 5) = "" Then                      'Kein Eintrag in  _
Hierarchiestufe 5 nichts machen
End If
If wsZ.Cells(H04, 5)  "" Then                         'Equi aus Hierarchiestufe 4  _
und 5 sind gleich
wsZ.Cells(H04, 4) = wsZ.Cells(H05, 10)              'In Zelle Hierarchiestufe 3  _
Equi aus Hierarchiestufe 9 (Adresse aus 2. Loop) schreiben
End If
End If
Next H05
H05 = 2                                                     'Zähler von 2. Loop zurü _
ckstellen
Next H04
If wsZ.Cells(wsZ.Rows.Count, "D").End(xlUp).Row = 1 Then        'Letzte Zeile Quelle
Exit 

Sub                                                    'Programm beenden
End If
'================================== Hierarchiestufe 2 ==== alle Equis mit Eintrag in  _
Hierarchiestufe 3 Equis in Hierarchiestufe 10 suchen ==================================
For H03 = 2 To lzQ                                              '1. Loop
var03 = Range("D" & H03).Value                              'Equi Nummer in von jeder  _
Zelle in Hierarchie 3 lesen bis letzte Zeile
For H04 = 2 To lzQ                                          '2.Loop
Equi = Range("K" & H04).Value                           'Equi Nummer in von jeder  _
Zelle in Hierearchie 10(Basis) lesen bis letzte Zeile
If var03 = Equi Then                                    'Equi Nummer vergeleichen  _
Hierarchie 3 mit Hierarchie 4
If wsZ.Cells(H03, 4) = "" Then                      'Kein Eintrag in  _
Hierarchiestufe 4 nichts machen
End If
If wsZ.Cells(H03, 4)  "" Then                         'Equi aus Hierarchiestufe 3  _
und 4 sind gleich
wsZ.Cells(H03, 3) = wsZ.Cells(H04, 10)              'In Zelle Hierarchiestufe 2  _
Equi aus Hierarchiestufe 9 (Adresse aus 2. Loop) schreiben
End If
End If
Next H04
H04 = 2                                                     'Zähler von 2. Loop zurü _
ckstellen
Next H03
If wsZ.Cells(wsZ.Rows.Count, "C").End(xlUp).Row = 1 Then        'Letzte Zeile Quelle
Exit 

Sub                                                    'Programm beenden
End If
'================================== Hierarchiestufe 1 ==== alle Equis mit Eintrag in  _
Hierarchiestufe 2 Equis in Hierarchiestufe 10 suchen ==================================
For H02 = 2 To lzQ                                              '1. Loop
var02 = Range("C" & H03).Value                              'Equi Nummer in von jeder  _
Zelle in Hierarchie 2 lesen bis letzte Zeile
For H03 = 2 To lzQ                                          '2.Loop
Equi = Range("K" & H03).Value                           'Equi Nummer in von jeder  _
Zelle in Hierearchie 10(Basis) lesen bis letzte Zeile
If var02 = Equi Then                                    'Equi Nummer vergeleichen  _
Hierarchie 2 mit Hierarchie 3
If wsZ.Cells(H02, 3) = "" Then                      'Kein Eintrag in  _
Hierarchiestufe 3 nichts machen
End If
If wsZ.Cells(H02, 3)  "" Then                         'Equi aus Hierarchiestufe 2  _
und 3 sind gleich
wsZ.Cells(H02, 2) = wsZ.Cells(H03, 10)              'In Zelle Hierarchiestufe 1  _
Equi aus Hierarchiestufe 9 (Adresse aus 2. Loop) schreiben
End If
End If
Next H03
H03 = 2                                                     'Zähler von 2. Loop zurü _
ckstellen
Next H02
If wsZ.Cells(wsZ.Rows.Count, "B").End(xlUp).Row = 1 Then        'Letzte Zeile Quelle
Exit 

Sub                                                    'Programm beenden
End If
End Sub

Anzeige
AW: Hierarchie Struktur aufbauen
08.07.2020 22:42:48
Richi
Besten Dank für den Code. Erhalte Fehler bei Equi = 0 wenn ich mit 12-Stelligen Werten (nicht Nummerisch) laufen lasse
AW: Hierarchie Struktur aufbauen
08.07.2020 11:21:52
fcs
Hallo Richi,
habe mich mit deinem Problem auch beschäfftigt.
Durch die Verwendung von Daten-Arrays werden die vielen Zugriffe auf Zellen im Tabellenblatt vermieden und das Makro wird sehr schnell.
In deinem Makro kannst du schon etwas Zeit gewinnen, indem du die Bildschirmaktualisierung vorübergehend deaktivierst - aber viele Zellenzugriffe = lange Makrolaufzeit.
LG
Franz

Sub Hierarchie()
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) Then
strHierarchie = varEqui
Else
strHierarchie = varNHA & ";" & varEqui
'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
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
'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
.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, 1), Array(2, 1), Array(3, 1)), _
TrailingMinusNumbers:=True
Application.ScreenUpdating = True
End With
End Sub

Anzeige
AW: Hierarchie Struktur aufbauen
08.07.2020 22:35:17
Richi
Hallo Franz
WoW...Der Code rechnet echt schnell und fast Fehlerlos.
Der Fehler liegt darin, dass bei allen Zellen die in Hier_01 leer sind, die Zellenranges Hier_02 - Hier_xx ab Spalte Hier_01 eingetragen sein müssten. Kannst du mir da noch helfen? Dein Code überschreitet mein VBA Wissen.
Liebe Gruess
Richi
Aktuelles Ergebniss:
Floc Hier_01 Hier_02 Hier_03 Hier_04 Hier_05 Hier_06
CW12 11448410
CW12 11469942 11469955
CW12 11498556
CW12 11475773 12007026
CW12 11448876 11448324
CW12 11448410 11449508 11449509 11449525 11488392
CW12 11451959 11452030 11452031 11481607 11468783
CW12 11467142 11448318
CW12 11469911 11469912 11469939
CW12 11469727 12007732
CW12 11449065 12007731
CW12 11449061 12007730
CW12 11449057 12007729
So sollte es aussehen:
Floc Hier_01 Hier_02 Hier_03 Hier_04 Hier_05 Hier_06
CW12 11448410
CW12 11469942 11469955
CW12 11498556
CW12 11475773 12007026
CW12 11448876 11448324
CW12 11448410 11449508 11449509 11449525 11488392
CW12 11451959 11452030 11452031 11481607 11468783
CW12 11467142 11448318
CW12 11469911 11469912 11469939
CW12 11469727 12007732
CW12 11449065 12007731
CW12 11449061 12007730
CW12 11449057 12007729
Anzeige
AW: Hierarchie Struktur aufbauen
09.07.2020 11:02:19
fcs
Hallo Richi,
könntest du die Ausgangsdaten und die gewünschte Darstellung des Ergebnisss bitte als Exceldatei hier hochladen.
t
In dem eTxt in deinem Post sehe ich keinen Unterschied in der Darstellung des Ergebnisses.
Soweit ich erkennen kann liefert mein Makro das Ergebnis so wie du es in deiner 1. Beispieldatei hochgeladen hattest.
LG
Franz
Anzeige
AW: Hierarchie Struktur aufbauen
09.07.2020 15:46:07
Richi
Hallo Franz
Hier das File https://www.herber.de/bbs/user/138909.xlsm
Habe im Reiter Hierarchie einen kleinen Teil farblich markiert.
Die grünen Felder HIer_01 sollten gefüllt sein. Der gelbe Ranges sollte um eine Spalte nach vorne rücken.
LG
Richi
Anzeige
AW: Hierarchie Struktur aufbauen
09.07.2020 22:36:49
fcs
Hallo Richi,
ich habe das Makro angepasst, so dass bei leeren "ÜbergEqu" die Spalte "Hier_1" leer bleibt.
Ich hab gesehen, das in der Ursprungsliste in den Spaltem "ÜbergEqu" und "Equipment" die Zahlen als Text stehen.
Ich hab das Aufteilen der Ergebniswerte in Spalten angepasst, so dass die Zahlen als Texte erhalten bleiben. Ist wichtig bei Zahlen mit führenden Nullen oder wenn die Ziffernfolge Richtung 15 Ziffern enthält, da Excel dann die Zahlendarstellung anpasst.
LG
Franz
Sub Hierarchie()
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) Then
strHierarchie = ";" & varEqui   'geänderte Zeile 2020-07-09 fcs
Else
strHierarchie = varNHA & ";" & varEqui
'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
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
'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

Anzeige
AW: Hierarchie Struktur aufbauen
10.07.2020 12:43:51
Richi
Danke Franz
Das Problem ist nach wie vor vorhanden. Irgendwo schreibt das Programm zweimal ein ";". das kann nicht sein.
Beim durchlaufen lassen mit F8 habe ich das hier festgestellt strHierarchie = varNHA & ";" & strHierarchie
Wo genau dieses zweite ";" herkommt konnte ich nicht erruieren.
Liebe Gruess
Richi
Anzeige
AW: Hierarchie Struktur aufbauen
10.07.2020 12:54:38
Richi
Hab da noch was geschrieben, um die Ranges eine Spalten nach vorne zu verschieben. Würde jedoch viel zu lange laufen (darum nur 20 Zeilen). Könnte ev. Lösungsansatz sein.
Gruss Richi
Sub move()
With wsZ
Dim i As Long
Dim lzZ As Long
Set wsZ = ActiveWorkbook.Worksheets("Hierarchie")           'Blatt f?r Hierarchie
lzZ = wsZ.Cells(wsZ.Rows.Count, "A").End(xlUp).Row          'Letzte Zeile Quelle
i = 1
For i = 2 To 20                                             'Ab Zeile 2 bis letzte  _
Zeile (aktuell nur 20 Zeilen)
If wsZ.Cells(i, 2) = "" Then                            'Wenn NHA nicht leer ist  _
dann in Spalte Hierarchie 9 Equipment schreiben
Range(Cells(i, 3), Cells(i, 11)).Select
Selection.Cut
Range(Cells(i, 2), Cells(i, 10)).Select
ActiveSheet.Paste
End If
Next i
End With
End Sub

Anzeige
AW: Hierarchie Struktur aufbauen
10.07.2020 14:30:42
fcs
Hallo Richi,
da hatte ich bei deiner Erklärung für Verschiebung gelb/grün etwas falsch verstanden.
Zusätzlich gibt es ein Problem bei der Prüfung der Array-Inhalte auf "Leer", die einzelnen Zellen des Arrays sind bei leeren Zellen nicht leer sondern enthalten einen Leerstring.
Ich hab die Ürüfung entsprechend angepasst und nun funktioniert es, wenn die übergeordnete Ebende leer ist.
LG
Franz
Sub Hierarchie()
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
Else
strHierarchie = varNHA & ";" & varEqui
'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
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
'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

Anzeige
AW: Hierarchie Struktur aufbauen
10.07.2020 15:43:39
Richi
Salü Franz
Ein Teil ist jetzt richtig. Gibt aber immer noch leere Felder im Hier_01. So wie ich das sehe, liegt es am String der eingelesen wir noch zwei";;" vorhanden. Das sollte nicht sein. Gibt's von deiner Seite her eine Möglichkeit, bevor die Daten eingelesen werden, einen Replace zu machen ";;"zu ";"
Oder den Code den ich geschrieben habe so zu optimieren, dass nach dem Import die Zeilen welche in Spalte B leer sind den ganzen Range um eine Spalte nach links zu schieben.
Gruss Richi
Sub move()
With wsZ
Dim i As Long
Dim lzZ As Long
Set wsZ = ActiveWorkbook.Worksheets("Hierarchie")           'Blatt f?r Hierarchie
lzZ = wsZ.Cells(wsZ.Rows.Count, "A").End(xlUp).Row          'Letzte Zeile Quelle
i = 1
For i = 2 To 20                                             'Ab Zeile 2 bis letzte  _
Zeile (aktuell nur 20 Zeilen)
If wsZ.Cells(i, 2) = "" Then                            'Wenn NHA nicht leer ist  _
dann in Spalte Hierarchie 9 Equipment schreiben
Range(Cells(i, 3), Cells(i, 11)).Select
Selection.Cut
Range(Cells(i, 2), Cells(i, 10)).Select
ActiveSheet.Paste
End If
Next i
End With
End Sub

Anzeige
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

Anzeige
AW: Hierarchie Struktur aufbauen
10.07.2020 17:15:52
fcs
Hallo Richim
super, dass du es lösen konntest.
Ich denke es sind nicht alle 4 Zeilen mit Anweisung zum Ersetzen erforderlich.
evtl. reicht es schon nur hier die Ersetzung zu machen:
                    'Floc an Anfang des Ergebnissses stellen
strHierarchie = strFloc & ";" & strHierarchie
strHierarchie = Replace(strHierarchie, ";;", ";")   'Replace
'Ergebnis eintragen
Nicht erforderlich sollte es hier sein:
                    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

Hier kann vom logischen Ablauf her kein doppeltes ";;" entstehen.
LG
Franz
Anzeige
2 verschiedene Autonummerierungen
07.07.2020 06:15:18
lupo1
Wie man ein VBA-Makro ablaufen lässt, weißt Du sicherlich. Die beiden folgenden Möglichkeiten erstellen Dir Autonummerierungs-Dateien, die selbst kein VBA enthalten. VBA wird also nur zur Datei-Konstruktion verwendet, damit ich hier keine Datei anhängen muss, weil diese durch das Konstruktionsmakro ganz einfach konstruiert wird. Das mit dem Ebenen-Trigger (das ist die Ebenensteuerung!) dürfte anhand des Beispiels klar werden.
Such Dir also eines von beiden aus. Das reicht aus.
Sub Autonummerierung(): Workbooks.Add xlWorksheet: [A1:D1] = Split("Trigger Kapitel Titel Kombi")
[A2:A21] = WorksheetFunction.Transpose(Split("1 1 1 1 0 0 -1 -1 1 0 1 0 -2 1 0 0 -2 1 0 -1"))
[C2:C21] = WorksheetFunction.Transpose(Split("Getränke Wasser abgefüllt still medium classic " & _
"Kranberger Bier Pils Weizen Kristall Hefe Wein rot weiß rosé Essen Vorspeise Nachspeise Fazit"))
ActiveWorkbook.Names.Add Name:="Nummerierung", RefersToR1C1:= _
"=TEXT(SUBSTITUTE(R[-1]C,""."",)*10^RC[-1]+1,REPT(""0""""."""""",LEN(R[-1]C)/2+RC[-1]))"
[B2].FormulaR1C1 = "=""1.""": [B3:B21].FormulaR1C1 = "=Nummerierung"
[D2:D21].FormulaR1C1 = "=RC[-2]&"" ""&RC[-1]"
[E1] = 8: [E2:E21].FormulaR1C1 = "=REPT("" "",(LEN(RC[-3])-2)/2*R1C)&RC[-2]": End Sub
Sub Autonummerierung() 'Variante mit mehr als 15 Ebenen und Nummern pro Ebene 1:9^9. Test xl2000 + 2010
Workbooks.Add xlWorksheet: [A1:D1] = Split("Trigger Kapitel Titel Kombi")
[A2:A21] = WorksheetFunction.Transpose(Split("1 1 1 1 0 0 -1 -1 1 0 1 0 -2 1 0 0 -2 1 0 -1"))
[C2:C21] = WorksheetFunction.Transpose(Split("Getränke Wasser abgefüllt still medium classic " & _
"Kranberger Bier Pils Weizen Kristall Hefe Wein rot weiß rosé Essen Vorspeise Nachspeise Fazit"))
ActiveWorkbook.Names.Add Name:="XX", RefersToR1C1:="=R[-1]C"
ActiveWorkbook.Names.Add Name:="Ebenen", RefersToR1C1:="=MAX(1,LEN(XX)-LEN(SUBSTITUTE(XX,""."",))+MIN(1,RC[-1]))"
ActiveWorkbook.Names.Add Name:="Wennfehler", RefersToR1C1:="=SUBSTITUTE(LEFT(" & _
"SUBSTITUTE(XX,""."",""-"",Ebenen-1),SEARCH(""-""," & _
"SUBSTITUTE(XX,""."",""-"",Ebenen-1))),""-"",""."")&MID(SUBSTITUTE(XX&0,"".""," & _
"REPT("" "",99)),Ebenen*99-98,99)+1&""."""
ActiveWorkbook.Names.Add Name:="Nummerierung", RefersToR1C1:= _
"=IF(ISERROR(Wennfehler),MID(XX,1,SEARCH(""."",XX)-1)+1&""."",Wennfehler)"
[B2].FormulaR1C1 = "=""2017.8.17.1.""": [B3:B21].FormulaR1C1 = "=Nummerierung"
[D2:D21].FormulaR1C1 = "=RC[-2]&"" ""&RC[-1]"
[E1] = 8: [E2:E21].FormulaR1C1 = "=REPT("" "",(LEN(RC[-3])-2)/2*R1C)&RC[-2]": End Sub
Anzeige
AW: 2 verschiedene Autonummerierungen
07.07.2020 12:14:29
Richi
Danke Lupo
Es scheint sich da ein Missverständnis eingeschlichen zu haben. Die Struktur von welcher Onur schrieb entspricht nicht derjenigen die ich vor mir habe (siehe mein Link). Trotzdem besten Dank für deine Hilfe.
Gruss Richi
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige