PDA

Vollständige Version anzeigen : Tabellen zusammenführen und auswerten


LutzPeter
30.07.2012, 09:21
Hallo liebe Community,

ich habe eine Aufgabe erhalten bei der ich leider nicht mehr weiter vorankomme.
Ich hoffe ihr könntet mir bei dem folgenden Problem helfen.
Ich habe auf mehreren Tabellenblättern mehrere Tabellen die nach dem gleichen Muster gestrickt sind jedoch unterschiedliche Anzahl an Zeilen haben.
Ich möchte nun ein Übersichtsblatt erzeugen, dass mir die Werte der 1. Spalte aller vorhandenen Tabelle in der Arbeitsmappe, welches auf mehreren Tabellenblätter verteilt ist, zusammenführt und auflistet.
Dabei sollen keine Doppelten Einträge vorhanden sein, jedoch die Gesamtanzahl eventuell rechts daneben angezeigt werden.

Dies soll möglichst auf einem neuen Tabellenblatt geschehen.

Vielen Dank für die Unterstützung !

EarlFred
30.07.2012, 10:09
Hallo ?,

ich nehme vereinfachend an, das Übersichtsblatt existiert bereits und heißt Übersicht:
Option Explicit

Sub Zusammenführen()
Dim ws As Worksheet
Dim fVarTemp As Variant, i As Long
Dim oDic As Object

Set oDic = CreateObject("Scripting.Dictionary")

For Each ws In ThisWorkbook.Worksheets
If Not ws.Name = "Übersicht" Then

fVarTemp = Intersect(ws.UsedRange, ws.Columns(1)).Value

For i = LBound(fVarTemp, 1) + 1 To UBound(fVarTemp, 1) '+1 = 1 Überschriftszeile auslassen, ggf entfernen/ändern
oDic(fVarTemp(i, 1)) = oDic(fVarTemp(i, 1)) + 1
Next i

Erase fVarTemp
End If
Next ws

With Worksheets("Übersicht")
.Cells(1, 1).Resize(oDic.Count) = Application.Transpose(oDic.keys)
.Cells(1, 2).Resize(oDic.Count) = Application.Transpose(oDic.items)
End With

Set oDic = Nothing
End Sub

Grüße
EarlFred

LutzPeter
30.07.2012, 10:25
Hallo,

leider ist es nicht das was ich mir vorgestellt habe...
Ich hoffe ihr könnt es euch mit der Beispiel Datei eher meine Anforderung vorstellen, wie könnte ich diese zur Verfügung stellen.
Das Tabellenblatt auf der es erstellt werden soll heißt Auswertung.

Und man sollte nur die Daten der 1. SPALTE aller vorhandenen Tabellen, auf den verschiedenen Blättern aufgelistet bekommen.

vbanewcomer
30.07.2012, 10:29
wenn jetzt noch eine Datei vorhanden wäre ....

LutzPeter
30.07.2012, 10:32
Ist es denn nicht möglich eine Datei nachträglich hinzuzufügen ?

EarlFred
30.07.2012, 10:33
Hallo ?,

leider ist es nicht das was ich mir vorgestellt habe...
Das ist leider auch keine Fehlerbeschreibung, wie ich sie mir vorstelle...
Was tut der Code denn anderes, als Du Dir vorgestellt hast? Was passiert? Was passiert nicht?

Und man sollte nur die Daten der 1. SPALTE aller vorhandenen Tabellen, auf den verschiedenen Blättern aufgelistet bekommen
Also bei mir tut der Code GENAU das - wenn man den Namen des Ausgabeblattes im Code geändert hat.

Ist es denn nicht möglich eine Datei nachträglich hinzuzufügen ?
Du musst Dich erst registrieren, bevor Du Dateien anhängen kannst. Auch kannst Du erst dann Deine (als reg. Nutzer erstellten) Beiträge nachträglich (für einen gewissen Zeitraum) editieren.


Noch ein Versuch, von der "Logik" her aber gleich:
Option Explicit

Sub Zusammenführen()
Dim ws As Worksheet
Dim fVarTemp As Variant, i As Long
Dim oDic As Object

'---------------------------------------------
'HIER BLATTNAME FÜR AUSGABE ÄNDERN!
Const strWsAuswertung As String = "Auswertung"
'---------------------------------------------

Set oDic = CreateObject("Scripting.Dictionary")

For Each ws In ThisWorkbook.Worksheets
If Not ws.Name = strWsAuswertung Then

If Not Intersect(ws.UsedRange, ws.Columns(1)) Is Nothing Then
fVarTemp = Intersect(ws.UsedRange, ws.Columns(1)).Value

For i = LBound(fVarTemp, 1) + 1 To UBound(fVarTemp, 1) '+1 = 1 Überschriftszeile auslassen, ggf entfernen/ändern
oDic(fVarTemp(i, 1)) = oDic(fVarTemp(i, 1)) + 1
Next i

Erase fVarTemp

End If
End If
Next ws

With Worksheets(strWsAuswertung)
.Cells(1, 1).Resize(oDic.Count) = Application.Transpose(oDic.keys)
.Cells(1, 2).Resize(oDic.Count) = Application.Transpose(oDic.items)
End With

Set oDic = Nothing
End Sub


Grüße
EarlFred

LutzPeter
30.07.2012, 10:47
So neuer Versuch...
Das Problem liegt daran, dass die Tabellen auf mehreren Blättern vorliegen und das vorgeschlagene Makro nur das erste Blatt überprüft, welches nicht mit einbezogen werden sollte genau wie das Auswertungsblatt.
Sorry für die unverständliche Erklärung meinerseits vorhin.
Es sollten die Artikelnr. der nachdem Auswertungsblatt folgenden Blättern aufgelistet werden nachdem gleichen Prizip wie vorhin...

EarlFred
30.07.2012, 11:44
Hallo ?,

das vorgeschlagene Makro nur das erste Blatt überprüft
Das lass ich so nicht gelten ;)

Das eigentliche Problem (neben der Tatsache, dass es nach der ergänzten Aufgabenstellung ein Blatt "Übersicht" gibt, das ebenfalls nicht betrachtet werden soll) ist, dass die auszuwertenden Daten in der 2.(!) Spalte auf den Blättern liegen.

Geändertes Makro anbei:
Option Explicit

Sub Zusammenführen()
Dim ws As Worksheet
Dim fVarTemp As Variant, i As Long
Dim oDic As Object

'---------------------------------------------
'HIER BLATTNAME FÜR AUSGABE ÄNDERN!
Const strWsAuswertung As String = "Auswertung"
'---------------------------------------------

Set oDic = CreateObject("Scripting.Dictionary")

For Each ws In ThisWorkbook.Worksheets
If Not ws.Name = strWsAuswertung And Not ws.Name = "Übersicht" Then

If Not Intersect(ws.UsedRange, ws.Columns(2)) Is Nothing Then
fVarTemp = Intersect(ws.UsedRange, ws.Columns(2)).Value

For i = LBound(fVarTemp, 1) + 1 To UBound(fVarTemp, 1) '+1 = 1 Überschriftszeile auslassen, ggf entfernen/ändern
If fVarTemp(i, 1) > "" Then
oDic(fVarTemp(i, 1)) = oDic(fVarTemp(i, 1)) + 1
End If
Next i

Erase fVarTemp

End If
End If
Next ws

With Worksheets(strWsAuswertung)
.Cells(1, 1).Resize(oDic.Count) = Application.Transpose(oDic.keys)
.Cells(1, 2).Resize(oDic.Count) = Application.Transpose(oDic.items)
End With

Set oDic = Nothing
End Sub

Grüße
EarlFred

LutzPeter
30.07.2012, 12:09
Vielen Dank! Das war mein Fehler ich hab mich auf die Tabelle selbst und nicht auf das Tabellenblatt bezogen.

Das ist genau das gewünschte Ergebnis ! Allerdings hätte ich noch eine Frage.

Ist die Liste auch nach Takten zuzuordnen, in der Form in der Sie besteht.
Sodass man auch das fehlende Teil per Takt zuordnen kann.

Zusatz:
Könnte man dies auch gleich als Tabelle formatieren und das Makro so anpassen, dass der Eintrag Artikelnr. nicht mit einbezogen wird.

Nochmals Vielen Dank !

EarlFred
30.07.2012, 15:26
Hallo ?,

wie genau stellst Du Dir die Darstellung der erweiterten Aufgabenstellung vor?
Die Artikelnummern treten nach der Auswertung ja nun nur noch einfach auf - auch, wenn diese zu mehreren "Takten" gehören. Wie genau soll die Zuordnung nun also aussehen?

Ein Beispiel sagt mehr als viele Worte ;)

Grüße
EarlFred

LutzPeter
30.07.2012, 15:40
Ich versuche bis morgen Mittag ein genaues Beispiel zu erstellen.
Wäre Ihnen dankbar, wenn sie morgen hier reinschauen könnten.

LutzPeter
31.07.2012, 08:50
Ich habe nochmal die Datei etwas bearbeitet und die Auswertung mal beschrieben wie sie aussehen sollte.
Ich weiß allerdings nicht, ob dies umzusetzten ist.
Über jede Hilfe bin ich dankbar

LutzPeter
03.08.2012, 10:00
Wie müsste man den Code anpassen sodass auch der Durchschnittsverzug rechts neben der Anzahl abgebildet wird. Dieser befindet sich jeweils immer in der Spalte J.

Ferner wäre auch wünschenswert die Spalte L, in der der Lieferant stehen sollte aufgelistet wird.

Ich hoffe ihr könnt mir helfen.
Vielen Dank für Eure Mühe !

EarlFred
03.08.2012, 14:01
Hallo namenlos,

meine Rückfragen aus Post #10 erachte ich als noch nicht zufriedenstellend beantwortet. Gleiche Rückfragen gelten analog für die erweiterte Fragestellung.
Die Beispieldatei ist unbrauchbar.
Bitte allen unnötigen Ballast aus den Beispieldateien entfernen (inkl. externer Verknüpfungen, wirkungsloser Formeln etc.) und auch eine Darstellung des gewünschten Ergebnisses beifügen.

Da meinen Nachfragen nicht nachgegangen wird, verabschiede ich mich. Viel Erfolg weiterhin.

Grüße
EarlFred

LutzPeter
06.08.2012, 10:54
Hallo Earl,

ich wollte deine Fragen in dem Tabellenblatt beantworten, habe jedoch die Falsche Datei hochgeladen.

Nach einiger Überlegung bin ich zum Entschluss gekommen, dass die aktuelle Ansicht doch die bessere ist, als die die ich mir mit den Takten vorgestellt habe.
Jedoch würde mich gerne interessieren ob man die Felder im Tabellenblatt Auswertung.
Mit dem Lieferanten und dem durchschnittlichen Verzug mittels Makros noch ergänzen könnte.

Gruß Peter