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

Liste aus Tabellenblätter erzeugen

Liste aus Tabellenblätter erzeugen
29.03.2023 23:35:43
lea

Hallo ihr Lieben, 

Ich bräuchte eure Hilfe, und zwar habe ich einige PDF-Dateien bekommen, die ich bearbeiten soll. Die PDF-Dateien habe ich in Excel-Dateien konvertiert und stichprobenartig überprüft. 

Es geht darum, dass in jedem Tabellenblatt eine Handynummer hinterlegt ist. Dazu gibt es noch verschiedene Informationen wie bspw. der Datentarif, der Datenverbrauch sowie die Gesamtkosten. Zusätzlich gibt es detaillierte Einzelverbindungsnachweise (EVN). 

Die Aufgabe, die ich bekommen habe, ist eine Übersichtsliste zu erstellen. Ich soll eine Auflistung aller Telefonnummern erstellen, mit dem Datentarif, Datenverbrauch sowie die Gesamtkosten (und ein paar Infos zusätzlich). Ich würde das ganze händisch lösen, wären es nicht um die 900 Tabellenblätter je Datei. Es gibt insgesamt 3 Excel-Dateien.

Ich habe die Originaldatei genommen und daraus eine Beispieldatei erstellt, in der Hoffnung, dass ich den Code minimal anpassen muss. Meistens befinden sich die gesuchten Informationen in EINEM Tabellenblatt. Teilweise kommt es vor, dass ein Teil der Informationen (sind eigentlich immer die Gesamtkosten) im nächsten Tabellenblatt befindet, da die EVN zu lang ist (siehe Blatt856 und Blatt857). Unten rechts steht immer die Seitenzahl. Zudem gibt es auch Telefonnummern, die keine EVN vorweisen, das heißt, die Nummer wurde gar nicht verwendet und als Gesamtsumme steht dann nur „EUR“. Das soll in der Übersicht genauso angezeigt werden. 

Ich habe eine „Musterlösung“ erstellt, in der Hoffnung, dass ihr versteht, was ich genau benötige. Ich hoffe, ihr versteht mein Anliegen.
VIELEN DANK im VORAUS!! 

https://www.herber.de/bbs/user/158503.xlsx

Liebe Grüße

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Liste aus Tabellenblätter erzeugen
29.03.2023 23:55:22
Rudi Maintaire
Hallo,
jemandem ohne Excel/ VBA-Kenntnisse diese Aufgabe zu geben, ist eine ziemliche Unverschämtheit.
Zumindest ist dein Job für die nächsten Wochen sicher. ;-)

Gruß
Rudi


ich will mal...
30.03.2023 08:06:21
Oberschlumpf
...mein Glück versuchen :-)

Hi Lea,

bevor ich damit aber anfange, hab ich schon einige Fragen.

Du schreibst:
" Ich soll eine Auflistung ... erstellen, mit ... (und ein paar Infos zusätzlich)."

1. Um welche ...Infos zusätzlich... handelt es sich?
2. Sind diese ...Infos zusätzlich... in deiner Bsp-Datei enthalten?
3. In welchen Spalten im Blatt "Ergebnis" sollen ...Infos zusätzlich... eingetragen werden?
4. MUSS es eine Formel-Lösung sein, oder kann auch in VBA programmiert werden?

Bitte alle Fragen beantworten, da ich nur in VBA programmieren würde. Eine Formel-Lösung könnte ich nicht erstellen.
Ach ja, da ja mindestens ...Infos zusätzlich... im Blatt "Ergebnis" noch nicht enthalten sind, kannst du bitte eine neue Bsp-Datei mit allen Infos per Upload zeigen?

Ciao
Thorsten


Anzeige
AW: ich will mal...
30.03.2023 17:55:28
lea
Hallo Thorsten,

vielen lieben Dank für deine Antwort. :)

Mit "zusätzliche Infos" meine ich, dass in der Spalte A stehen soll, von welchem Blatt die Information bezieht. In der Bsp-Datei sind alle Informationen vorhanden, die ich später benötige.
Wenn man das ganze mit Formeln lösen kann, dann wäre es natürlich top, aber ich gehe davon aus, dass man das nur über die VBA-Programmierung am besten lösen kann.

Was mir noch einfällt, ist das der Abstand für die gesuchten Informationen immer gleich ist. Sprich bspw. der Verbrauch steht immer in der dritten Spalte. Die Information zum Anschluss immer in der zweiten Spalte.

Liebe Grüße


Anzeige
AW: ich will mal...
30.03.2023 18:03:54
Oberschlumpf
Hi Lea,

du verwirrst mich, weil...Zitat:

"...Sprich bspw. der Verbrauch steht immer in der dritten Spalte...."

Dann zeig bitte eine neue Bsp-Datei mit den Daten in den richtigen Spalten.
Denn in deiner "alten" Bsp-Datei stehen die Daten zum Verbrauch (wenn vorhanden) in Spalte D - und das ist die 4. Spalte.
Daher weiß ich nun nicht, was richtig ist...
...hast du in deiner alten Bsp-Datei eine falsche Spalte verwendet
...oder hast du in deiner Antwort an mich zwar von Spalte 3 geschrieben, aber Spalte 4 gemeint

???

Ciao erst mal
Thorsten


Anzeige
AW: ich hab mal...
31.03.2023 05:07:29
Oberschlumpf
...nun doch eine Lösung, auch wenn ich von dir noch keine Antwort auf meine letzte Frage bekam...ich hab einfach mal mit dem getestet, was du als Bsp-Datei gezeigt hast...

Hi Lea,

hier, probier mal
https://www.herber.de/bbs/user/158523.xlsm

Als ich die Idee von Yal las, dachte ich "uppss! :-) sein Code = nach wenigen Zeilen fertig - mein Code = sehr, sehr viele Zeilen lang!"
Nachdem ich aber Yal's Code ausprobierte, stellte ich fest, dass mein Code wenigstens zu 100% funktioniert - Yal sein Code ignoriert Werte in Spalte F, wenn diese größer 0 EUR sind :-)

ok ok, es wird nicht schwierig sein, diesen kleinen Fehler zu korrigieren...und es werden auch dann wohl nicht viel mehr Zeilen sein :-)

Trotzdem wollte ich meine Idee auch mal zeigen.

Konnten wir denn helfen?

Ciao
Thorsten


Anzeige
AW: ich hab mal...
31.03.2023 15:34:56
Yal
Woooos? ein Fehler? bei mir? kann nicht sein! ;-)

Ich dachte, mein Test war erfolgreich. Aber Tatsächlich kommt die Gesamtsumme am Ende vom letzten Blatt der EVN-Liste. Hierunten ein ergänzte Version.

Die Kürze kommt aus 2 Annahmen:
_ Ein Nummer (Anschluss oder Kennung) ist immer eindeutig, es sei denn die EVN-Liste ist so lang, dass mehrere Blätter notwendig sind, aber in den reine EVN-Blätter fehlt in "A7" den Begriff "Datenvolume" (abgesehen von meiner Gesamtsumme-Fehler)
_ die Verarbeitung ist einmalig, und daher die Performance zweitrangig

Hier eine korrigierte Version, die den Gesamtsumme der EVN mitnimmt:
Sub auflisten()
Dim wsZ As Worksheet 'Ziel
Dim wsQ As Worksheet 'Quelle
Dim Zeile As Range
Dim F As Range
    
    Set wsZ = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
    wsZ.Range("A1:F1") = Split("Blatt Kennung Anschluss Datenvolume Verbrauch Gesamtsumme")
    On Error Resume Next 'wegen Find
    For Each wsQ In ActiveWorkbook.Worksheets
        Set Zeile = wsZ.Cells(Rows.Count, "A").End(xlUp).Offset(1).EntireRow
        If wsQ.Range("A7").Value Like "Datenvolume*" Then 'wenn nicht: nur EVN, nicht interessant, nächste Blatt
            Zeile.Cells(1) = wsQ.Name 'Name des Blattes in Spalte A
            Zeile.Cells(2) = wsQ.Range("C4").Value  'Kennung in Spalte B übernehmen
            Zeile.Cells(3) = wsQ.Range("C6").Value  'Anschluss in Spalte c übernehmen
            Zeile.Cells(4) = wsQ.Range("D7").Value 'DatenVolume in Spalte D übernehmen
            Zeile.Cells(5) = wsQ.Range("D11").Value 'DatenVolume in Spalte D übernehmen
        End If
        'Gesamtsumme
        With wsQ.Cells(Rows.Count, "D").End(xlUp)
            If .Value Like "Gesamtsumme" Then
                Set F = Nothing: Set F = wsZ.Range("B:B").Find(wsQ.Range("C4").Value) 'Falls die Blätter nicht in der logische Reihenfolge stehen
                If Not F Is Nothing Then F.EntireRow.Cells(6) = CDbl(0 + Trim(Replace(.Offset(0, 1).Value, "EUR", "")))
            End If
        End With
    Next
End Sub
VG
Yal


Anzeige
und nun warte..zumindest ich...
31.03.2023 16:40:25
Oberschlumpf
...AUF LEAS ANTWORT!!!

Hi Yal :-)

und ebenso ich "sag" dir danke für deine echt kurze Lösung...wenn auch...na jaaaa...starte doch auch du mehrmals hintereinander deinen Code - merkst du es? :-) Genau so mehrmals erhältst du dann - immer wieder - ein neues, zusätzliches Tabellenblatt...wenn doch eigentlich ein einziges Tabellenblatt reichen würde, in dem die gewünschten Werte zusammengesucht werden, oder was meinst du?? :-))

Is ja auch nur so ein ganz klitzekleiner Schönheitsfehler :-)
hach..ich trau mich gar nich weiter^^ :-) ...aber..ähh...die Werte in Spalte D + E sind immer noch "nur" Textwerte - versuch mal, allein nur damit die Summenformel anzuwenden:-))

Ciao + n schönen Tag für dich ;-)
Thorsten


Anzeige
AW: und nun warte..zumindest ich...
31.03.2023 18:31:04
Yal
Hallo Thorsten,

ja, ich weiss, ich habe minimal gelöst :-) Zahlen sollten als Zahlen rauskommen.
Wenn Lea tatsächlich etwas dazu sagt, liefere ich nach.

Das neue Blatt müsste nicht sein. Dafür müsste aber das Blatt "Ergebnis" in einer separaten Arbeitsmappe rübergebracht werden.
Dann dort
Set wsZ = ThisWorkbook.Worksheets("Ergebnis")
Schönes Wochenende

VG
Yal


AW: ich will mal...
30.03.2023 19:37:23
Yal
Hallo zusammen,

mit Formel wäre kompliziert.

Sub auflisten()
Dim wsZ As Worksheet 'Ziel
Dim wsQ As Worksheet 'Quelle
Dim Zeile As Range
    
    Set wsZ = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
    wsZ.Range("A1:F1") = Split("Blatt Kennung Anschluss Datenvolume Verbrauch Gesamtsumme")
    For Each wsQ In ActiveWorkbook.Worksheets
        Set Zeile = wsZ.Cells(Rows.Count, "A").End(xlUp).Offset(1).EntireRow
        If wsQ.Range("A7").Value Like "Datenvolume*" Then 'wenn nicht: nur EVN, nicht interessant, nächste Blatt
            Zeile.Cells(1) = wsQ.Name 'Name des Blattes in Spalte A
            Zeile.Cells(2) = wsQ.Range("C4").Value  'Kennung in Spalte B übernehmen
            Zeile.Cells(3) = wsQ.Range("C6").Value  'Anschluss in Spalte c übernehmen
            Zeile.Cells(4) = wsQ.Range("D7").Value 'DatenVolume in Spalte D übernehmen
            Zeile.Cells(5) = wsQ.Range("D11").Value 'DatenVolume in Spalte D übernehmen
            If wsQ.Range("A14").Value Like "Anzahl*" Then Zeile.Cells(6) = wsQ.Range("E14").Value 'Gesamtsumme in Spalte F, falls vorhanden
        End If
    Next
End Sub
Diese VBA-Code legst Du in einem separaten Arbeitsmappe in einem allgemeine Modul: VBA öffnen (Alt+F11), menü "Einfügen", "Modul". Es öffnet sich Modul1. Diese Arbeitsmappe ist "ThisWorkbook" aus der Sicht des Codings.
Bevor das Makro gestartet wird (Alt+F8), muss man in die Datei mit den 900 Blätter gehen. "ActiveWorkbook" aus der Sicht des Codings.

Der Code fügt ein neues Blatt in "ThisWorbook" ein, und geht alle einzelne Blätter von "ActiveWorkbook" durch.
Glücklicherweise sind die Vorgaben stabil: Information immer an dieselbe Stelle, und einigermassen leicht zu auswerten: kein Datenvolume heisst nur EVN, heisst nicht relevant.

Viel Erfolg

VG
Yal

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige