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

VBA Gruppierungen auslesen- moeglich?

Forumthread: VBA Gruppierungen auslesen- moeglich?

VBA Gruppierungen auslesen- moeglich?
09.08.2016 04:59:38
hilde
Halli Hallo,
ich habe mal eine grundsaetzliche Frage an die Excel VBA Profis.
Ich habe (siehe Dateilink) verschiedene Produkte. Die einen sind Eltern, die anderen Babys. Manche Eltern besitzen Babys manche nicht.
Meine Frage bezieht sich jetzt darauf, dass ich eine Liste mit den Eltern habe (eine andere Datei) und die dazugehoerigen Babys in den Zeilen darunter einfuegen moechte.
Das Problem: die Babys lassen sich nur aufgrund der Gruppierung in der Quelldatei zu den eltern zuordnen. Kann ich nun durch die Gruppierungen (eltern immer an erster stelle der Gruppierungen) die babys zuordnen?
Link:https://www.herber.de/bbs/user/107482.xlsx
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Gruppierungen auslesen- moeglich?
09.08.2016 18:47:44
hilde
Niemand, der weiss ob das funktioniert?
AW: VBA Gruppierungen auslesen- moeglich?
10.08.2016 02:12:02
Piet
Hallo Hilde
ich weiss im Augenblick noch nicht genau um welche Babys es geht? Man kann sie durch Gruppieren rein optisch vor meinen Augen verstecken, ich sehe als Programmierer trotzdem was im Blatt ist. Mit der genauen Zell-Adresse. Schau es dir selbst an.
Das Makro kannst du für eigene Zwecke umschreiben. Oder sage uns mal genau worum es geht ?
mfg Piet
Sub Zuordnung_zeigen()
'Schleife für alle Zellen anzeigen
For Each AC In Range("A1:A7")
MsgBox AC.Address & ")   " & AC.Value & "  /  " & AC.Cells(1, 2)
Next AC
End Sub

Anzeige
Piet hat Dich falsch verstanden, allerdings...
10.08.2016 10:52:24
Michael
Hallo Hilde & Piet,
...denke ich, dass Dein Ziel ein sehr, sehr aufwändiges Unterfangen wird.
Grds. kannst Du die Gliederungsebene von Zeilen auslesen, wobei Ebene 1 die oberste Gliederungsebene oder gänzlich nicht gegliederte Zeilen darstellt.
Schematisch also
Sub a()
Dim c As Range
For Each c In Selection: Debug.Print Rows(c.Row).OutlineLevel: Next c
End Sub
Problematisch wird's aber jetzt schon mal bei der von Dir im Beispiel gezeigten Gliederungsstruktur:
Userbild
In dieser Struktur bleibt nur Produkt "tt3" als Eltern-Produkt über, obwohl es 3 Elternprodukte gibt.
"Korrekt" gegliedert müsste es aber, aus meiner Sicht, so aussehen:
Userbild
Erst wenn das mal gesichert ist geht's ans berühmte "Eingemachte": Jede Zeile der Quelle auf ihre Gliederungsebene zu überprüfen ist ja noch leicht, aber dann stellt sich die Frage - wie/wo kennzeichnet man alle Eltern-Produkte (also alle Ebenen 1) bzw. Kind-Produkte... jeder Ebene 1 muss eine bestimmte Anzahl an Kind-Produkten zugeordnet werden - wie wird das aber bestimmt? Außerdem kommen in Deinem Beispiel auch Eltern-Produkte vor, die keine Kind-Produkte aufweisen? Zudem geht es um einen Listenvergleich, d.h. wir müssen auch sicherstellen, dass ein Ebene 1 Produkt der Quelle auch im Ziel vorkommt, ansonsten überspringen...
Ideen gibt's evtl. dazu, aber ganz ehrlich: Das ist vermutlich ein Riesenaufwand, und ich weiß nicht ob das im Rahmen einer Forums-Hilfe machbar ist. Evtl. zeig noch zwei neue Beispiel-Mappen, wie Quelle und Ziel (sagen wir mal mit 20 Eltern und zugehörigen Kind-Produkten, Dummy-Daten, in der Quelle und 15 Eltern-Produkten im Ziel) genau aussehen (also vom Aufbau muss das dem Original entsprechen) - dann hätten wir eine konkretere Vorstellung und Testumgebung. Aber versprechen kann ICH hier nix...
LG
Michael
Anzeige

Forumthreads zu verwandten Themen

Anzeige

Infobox / Tutorial

VBA Gruppierungen in Excel auslesen und zuordnen


Schritt-für-Schritt-Anleitung

Um die Gruppierungen in Excel mit VBA auszulesen und die Babys den entsprechenden Eltern zuzuordnen, kannst Du folgenden Ansatz verwenden:

  1. Öffne die Excel-Datei. Stelle sicher, dass die Daten in der korrekten Struktur vorliegen (Eltern an erster Stelle, gefolgt von Babys).

  2. Öffne den VBA-Editor. Drücke ALT + F11, um den Visual Basic for Applications-Editor zu öffnen.

  3. Füge ein neues Modul hinzu. Klicke im Menü auf Einfügen > Modul.

  4. Kopiere den folgenden Code in das Modul:

    Sub Gruppierungen_auslesen()
        Dim c As Range
        Dim eltern As String
        Dim babys As String
    
        For Each c In Range("A1:A100") ' Passen Sie den Bereich nach Bedarf an
            If Rows(c.Row).OutlineLevel = 1 Then
                eltern = c.Value
            ElseIf Rows(c.Row).OutlineLevel = 2 Then
                babys = babys & c.Value & vbCrLf
            End If
        Next c
    
        MsgBox "Eltern: " & eltern & vbCrLf & "Babys: " & vbCrLf & babys
    End Sub
  5. Führe das Makro aus. Gehe zurück zu Excel und drücke ALT + F8, wähle Gruppierungen_auslesen und klicke auf Ausführen.

Jetzt solltest Du eine Meldung sehen, die die Eltern und die dazugehörigen Babys ausgibt.


Häufige Fehler und Lösungen

  • Fehler: "Laufzeitfehler 1004"

    • Lösung: Überprüfe, ob der angegebene Bereich ("A1:A100") korrekt ist und tatsächlich Daten enthält.
  • Fehler: Falsche Gruppierungszuordnung

    • Lösung: Stelle sicher, dass die Gliederungsebene der Zeilen korrekt gesetzt ist. Eltern sollten immer die Ebene 1 und Babys die Ebene 2 haben.

Alternative Methoden

Wenn Du keine VBA-Makros verwenden möchtest, kannst Du auch die Funktion INDIREKT in Kombination mit VERGLEICH und INDEX nutzen, um Eltern und Babys manuell zuzuordnen. Diese Methode ist jedoch aufwändiger und weniger flexibel als die Verwendung von VBA.


Praktische Beispiele

Hier ist ein Beispiel für eine einfache Struktur:

A
Eltern 1
Baby 1.1
Baby 1.2
Eltern 2
Baby 2.1

Mit dem obigen VBA-Skript wird Eltern 1 als Elternteil und Baby 1.1, Baby 1.2 als Babys angezeigt. Achte darauf, dass die Hierarchie in der Excel-Datei korrekt eingehalten wird.


Tipps für Profis

  • Debugging: Verwende Debug.Print, um Zwischenergebnisse im Direktfenster des VBA-Editors anzuzeigen. Das hilft dir, den Code besser zu verstehen und Fehler zu identifizieren.

  • Verwendung von Collections: Wenn Du eine große Anzahl an Eltern und Babys hast, erwäge die Verwendung von Collection oder Dictionary, um die Zuordnungen effizienter zu speichern und abzurufen.


FAQ: Häufige Fragen

1. Kann ich das Skript für größere Datenmengen verwenden? Ja, passe einfach den Bereich in der For Each Schleife an, um mehr Zeilen zu erfassen.

2. Funktioniert dieses Skript in allen Excel-Versionen? Das Skript sollte in den meisten modernen Excel-Versionen funktionieren, einschließlich Excel 2010 und neuer.

3. Was, wenn meine Daten nicht in einer einzigen Spalte sind? Du musst den Code anpassen, um mehrere Spalten zu durchlaufen und die Daten entsprechend zu verarbeiten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige