Sheets nach Spalten durchsuchen und auflisten

  • VB6
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Tortellini3000.

    Sheets nach Spalten durchsuchen und auflisten

    Hallo,

    ich bin ein absoluter Visual Basic Neuling ?( und mit der Aufgabe betraut worden, eine Liste dahingehend zu "automatisieren", dass unabhängig davon wieviele Sheets die Liste hat, zuverlässig alle Werte aus einer bestimmten Spalte in ein Sheet am Ende der Liste herauskopiert werden. Dort sollen diese dann nach Typ geordnet und ausgezählt werden. Und das ganze auch wenn die Sheets nicht alle gleich aufgebaut sind. Die Hauptsache ist, jedes der Sheets enthält eine Spalte mit "Bauformkennung" - nur diese Werte sollen kopiert werden.
    Ich bekomme eine derartige Auflistung nur hin, wenn ich eine feste Anzahl von Sheets habe und für jedes einzelne der relavanten Sheets einen entsprechenden Befehl hinterlege. Da die Anzahl der Sheets aber mit jeder neuen Liste variiert und als erster Reiter immer noch ein Deckblatt abliegt, muss man mit jeder neuen Liste das "Makro abändern" und an die Anzahl der Sheets die Bauformkennungen enthalten angleichen.
    Ich bin mir nicht sicher, ob sowas überhaupt möglich ist. Vielleicht kann mir ja jemand weiter helfen oder einen Tipp geben, mit welchem Ansatz man sowas lösen könnte.
    Ich hänge ein Beispiel für eine solche Liste an. Die rot markierten Werte (Liste1.jpg) aus allen Reitern sollen kopiert werden und weiter hinten eingefügt werden (Liste2.jpg). Dort soll anschließend die Auszählung stattfinden.

    Vielen Dank schonmal ;( :rolleyes:
    Markus
    Bilder
    • Liste 2.JPG

      95,01 kB, 1.250×467, 107 mal angesehen
    • Liste1.JPG

      245,06 kB, 1.627×981, 122 mal angesehen
    Hi.

    Verschachtelte Schleifen sind hier die vorgehensweise.

    Die "Sheets" werden durchlaufen, bei jedem "durchlauf" werden die Spalten durchlaufen, und abermals werden die Zellen durchlaufen.

    So ist das mit Excel.

    Bevor durchlaufen wird, sollte wenn möglich die "Anzahl" der durchläufe ermittelt werden.

    Als Beispiel: Sheet´s die durchlaufen werden sollen enthalten nicht den Text "BFK´s mit Stückzahlen" oder "Deckblatt", und enthalten überhaupt Text...

    Somit erzeugt Mann/Frau/Divers einen Bereich mit eingrenzenden Kriterien. "Wenn/Dann"

    Das wird verfeinert auf die Spalten des "aktuellen" Sheets angewendet, und noch feiner auf die "aktuelle Zelle" innerhalb des Bereiches der Zellenauswahl.

    Die Antwort ob es überhaupt möglich ist lautet: "Ja."

    Das Wichtige ist, die Schleifen rechtzeitig zu beenden.
    Wer will schon eine Spalte durchlaufen die nur leere Zellen enthält.

    Das kann im vorfeld ermittelt werden, im Fall der Sheets einfach fragen wieviele Sheets überhaupt, die Anzahl in eine Variable legen und mittels "For i = 0 to AnzahlSheets".

    Im Spalten bereich alle Spalten die von interessen sind auswählen, mit Textvergleich "Kopfzeile enthält Bauformkennung"...

    Dann die Zellen in dieser Spalte durchlaufen und Prüfen ob der Wert überhaupt was ist und ob dieser gewünscht ist...

    Dann alles nochmal für die "destination".

    Spalte auswählen im Sheet "BKF´s..." wo die "Auswertung/Summierung" staafinden soll, und dort entsprechend die Werte setzen.

    Ich hoffe es konnte Dir das Vorgehen evtl. erleichtern.

    c.u. Joshi

    Tortellini3000 schrieb:

    Ich bekomme eine derartige Auflistung nur hin, wenn ich eine feste Anzahl von Sheets habe

    Dafür gibt's For Each

    VB.NET-Quellcode

    1. For Each sh in Thisworkbook.Worksheets
    2. Set ColHeader = sh.Range("1:1").Find("Bauformkennung", LookIn:=xlValues, LookAt:=xlWhole)
    3. If Not ColHeader Is Nothing Then
    4. For Each Cell In Intersect(sh.UsedRange, ColHeader.EntireColumn)
    5. ''Mach was du tun willst
    6. Next
    7. End If
    8. Next
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --