Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1924to1928
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten aus Worksheets ziehen

Daten aus Worksheets ziehen
22.03.2023 16:32:22
maya

Hallo zusammen,

ich habe eine Datei die ca. 1000 Arbeitsblätter beinhaltet. In jedem Arbeitsblatt sind Informationen vorhanden. Ich möchte gewisse Informationen herausziehen und die in einer separaten Liste ausgeben. Die Daten befinden sich nicht immer in der selben Zeile. Jedoch ist der Abstand wo die Information drin steht immer derselbe.

Ich habe eine BSP-Datei erstellt und auch die Musterlösung, wie es aussehen soll. Ich hoffe es ist verständlich, was ich benötige. :)
https://www.herber.de/bbs/user/158381.xlsx


Vielen Dank im Voraus!!

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus Worksheets ziehen
22.03.2023 18:51:11
Mathias
Hallo Maya,

also möglich ist es.
Die Frage ist nur, wie kompliziert es wird. Das hängt davon ab, wie sehr sich die Blätter voneinander unterscheiden können.
Man kann das Blatt nach einem bestimmten Eintrag absuchen (z.B. "Kundennummer") und dann sagen, dass der entsprechende Wert zwei Zellen weiter rechts steht. und diesen dann entsprechend in deine Spalte kopieren.

1. Habe ich es richtig verstanden, dass der entsprechende Wert zu einem Text bestimmten Text immer gleich viele Spalten weiter rechts steht?
2. Stehen die Texte immer in der gleichen Spalte?
3. Stehen die Informationen für eine Zeile deiner Liste alle in einem Blatt?
4. Haben die Blätter eine unterschiedliche Anzahl an Daten oder stehen die nur anders Sortiert im Bereich A1:F14?
5. Sind die Daten, die du in deine Tabelle haben möchtest überall vorhanden?
6. Gibt es noch Blätter in der Mappe, die weder Durchsucht werden müssen noch das die Ziel Liste sind?

Je mehr Informationen man vorher hat, desto weniger muss das Makro suchen. Desto schneller wird das Makro laufen.
Mein erster Ansatz würde sein:
Suche von A1 bis A20 nach Bestellnummer und kopiere die Zahl in der entsprechende Zeile von Spalte C in deine Liste.
Das würdest du dann mit allen Einträgen wiederholen. Natürlich mit den entsprechenden Spalten. Und das dann für jedes Blatt ausführen lassen.

Liebe Grüße
Mathias


Anzeige
AW: Daten aus Worksheets ziehen
23.03.2023 13:59:37
maya
Hallo Mathias,

vielen lieben Dank für deine Antwort. Die Tabellenblätter unterscheiden sich nicht viel, behaupte ich mal. Lediglich die "Summe" ist in einigen Tabellenblättern weiter unten. Deswegen würde ich vorschlagen den Bereich A1:G100 zu betrachten. Oberhalb der "Summe" wird in den Tabellenblättern, der Einzelverbrauch angezeigt, der für mich irrelevant ist.

Zu deinen Fragen:
1. Ja
2. Ja, die Texte stehen immer in der gleichen Spalte
3. Ja
4. Lediglich die "Summe" ist in unterschiedlichen Zeilen jedoch immer in der selben Spalte.
5. Ja, die Information sind überall vorhanden
6. Jaein, das wäre die "Ergebnistabelle die aus dem VBA-Code generiert wird.

Liebe Grüße


Anzeige
AW: Daten aus Worksheets ziehen
24.03.2023 10:20:26
Mathias
Hallo Maya,

tut mir leid, dass ich erst heute antworte. Ich habe gestern übersehen, dass du geantwortet hattest.

Also ich habe es jetzt so verstanden, dass du in den Blättern jeweils eine Art Beleg hast. Die Belege haben einen Art Kopf in dem die meisten Informationen stehen, die du möchtest. Dieser Kopf ist immer gleich aufgebaut (Jeder Wert in einer bestimmten Zelle). Lediglich die Summe kann (aufgrund unterschiedlicher Anzahl von Positionen im Beleg) in verschiedenen Zeilen stehen. Jedoch immer in der gleichen Spalte.

Dementsprechend habe ich ein kleines Makro für dich geschrieben:
Option Explicit

Sub Erstelle_Liste()
    Application.ScreenUpdating = False                                          'Schaltet ScreenUpdate AUS, wärend das Makro läuft (dadurch wird das Makro schneller)
    Dim myList As Worksheet
    Set myList = ThisWorkbook.Worksheets("Liste")                               'Setzt das Tabellenblatt mit der Ziel-Liste in eine Variable
    
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets                                      'Durchläuft alle Tabellenblätter in dieser Arbeitsmappe
        If Not ws Is myList Then                                                'Führt den folgenden Code nur aus, wenn das Blatt nicht das Ziel-Blatt ist
            Dim neueZeile As Long
            neueZeile = myList.Cells(Rows.Count, 1).End(xlUp).Row + 1           'Setzt die Nummer der nächsten leeren Zeile in der Ziel-Liste
            
            myList.Cells(neueZeile, 1).Value = ws.Name                          'Schreibt den Namen des Tabellenblatts in die erste Spalte
            myList.Cells(neueZeile, 2).Value = ws.Cells(2, 3).Value             'Füllt die Spalten mit den entsprechenden Werten
            myList.Cells(neueZeile, 3).Value = ws.Cells(5, 3).Value
            myList.Cells(neueZeile, 4).Value = ws.Cells(6, 4).Value
            myList.Cells(neueZeile, 5).Value = ws.Cells(10, 4).Value
            myList.Cells(neueZeile, 6).Value = ws.Cells(5, 5).Value
            
            Dim i As Long
            For i = 13 To 100                                                   'Durchläuft die Zeilen im Bereich der angegebenen Nummern
                If ws.Cells(i, 4).Text = "Summe" Then                           'Schaut, ob in der aktuellen Zeile in der entsprechenden Spalte der entsprechende Text steht
                    myList.Cells(neueZeile, 7).Value = ws.Cells(i, 5).Value     'Schreibt den Wert aus der entsprechenden Zeile in die Ziel-Liste
                    Exit For                                                    'Beendet die "For"-Schleife, da der entsprechende Eintrag bereits gefunden ist
                End If
            Next
        End If
    Next
    Application.ScreenUpdating = True                                           'Schaltet ScreenUpdate wieder EIN
End Sub
Dieses Makro durchläuft alle Blätter und fügt bestimmte Werte in eine neue Zeile in deiner Liste.
Die Werte für "B" bis "F" werden aus einer bestimmten Zelle entnommen.
Es wird in Spalte "D" von Zeile 13 bis 100 geschaut, ob dort "Summe" steht. Falls das Makro in diesem Bereich fündig wird, so wird der Wert aus der gleichen Zeile aus Spalte "E" genommen um diesen in deine Liste Spalte "G" zu schreiben.

Ich suche jetzt erst ab Zeile 13 war ich davon ausgehe, dass dies die erste mögliche Zeile ist, wenn der Beleg nur eine Position hat.
Du kannst diese Nummer aber auch ändern. (1 wäre auch möglich)
100 habe ich jetzt angenommen, weil du dies in den Raum gestellt hast. diese Zahl kannst du auch ändern.
Da die Schleife unterbrochen wird, wenn das Makro fündig wurde, kann dort auch eine größe Zahl verwendet werden, ohne dass das Makro langsamer wird.
Maximal darf dort das Maximum stehen, was ein Tabellenblatt an Zeilen haben kann (Rows.Count (entspricht: 1048576)).

Du müsstest nur den Namen des Tabellenblatts oben angeben, in dem deine Liste ist.
Sollten andere Werte auch in der Zeile variable sein, so kann man dort auch eine "Such-Schleife" drum bauen.
Es ist auch möglich die korrekte Spalte zu suchen.

Ich hoffe, dass dies nun weiter hilft.
Kannst aber gern nochmal nachfragen, wenn noch was unklar ist oder etwas nicht richtig funktioniert.

Liebe Grüße
Mathias

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige