Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1368to1372
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 zusammenfassen

Daten zusammenfassen
29.06.2014 17:44:02
Michael

Guten Tag Zusammen,
ich habe folgendes (großes] Problem:
in mehreren Tabellenblättern habe ich in Spalte A und B Daten: in Spalte A ein Verkaufsdatum und in Spalte B den Umsatz.
In einem Blatt Zusammenfassung möchte ich ebenfalls in Spalte A das Datum hinterlegen in in den anderen Spalten die Umsätze der entsprechenden Blätter.
Mein Problem ist das Datum: teilweise ist das Datum in den unterschiedlichen Blättern identisch, in der Auswertungstabelle soll aber kein doppeltes Datum erscheinen.
Hier ein Beispiel:https://www.herber.de/bbs/user/91317.xlsx
Hinweis: in der Zusammenfassung habe ich die Umsätze noch nicht per Formel hinterlegt, sondern als Zahlen eingefügt!!
Kriegt man die Datumsspalte ohne doppeltes Datum mit Formeln oder kleinem Makro irgendwie hin?
Vielen Dank
Michael

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten zusammenfassen
30.06.2014 09:03:57
MCO
Moin!
Wenn du die Daten schon hinterlegst (irgendein Gebiet hat an jedem Tag Umsatz), kannst du die Werte für die Gebiete mit folgender formel (in "B2") eintrage und dann auf die Gesamte Zusammenfassung ausweiten:
=WENNFEHLER(SVERWEIS($A2;INDIREKT("'"&B$1&"'!A1:B99");2;0);"")

Gruß, MCO

fast
30.06.2014 12:21:06
Michael
Hallo MCO,
vielen Dank! Die Formel zum Daten holen ist schon super.
Aber wie kriege ich im Blatt Zusammenfassung die Spalte mit dem Datum so hin, das jedes Datum aus den Blättern erkannt wird, aber kein doppeltes Datum auftaucht?
Vielen Dank und Gruß
Michael

Anzeige
AW: fast
30.06.2014 13:15:41
MCO
Hi!
Nimm einfach JEDES Datum, sprich: in A1 den ersten Tag der Auflistung und dann in A2 die Formel =A1+1.
Wie schon gesagt, gehe ich davon aus, dass irgendein Gebiet schon Umsatz gemacht haben wird (viell. abgesehen von bundeseinheitlichen Feiertagen)
Selbst Sa+So könntest du noch über eine Formel herausnehmen.
Alles andere würde ich ansonsten über VBA holen:
Das Makro vom 1. Blatt aus starten
Sub Datum_holen()
lz = Range("A" & Rows.Count).End(xlUp).Row + 1
For sh = 2 To Sheets.Count
With Sheets(sh)
For Each dat In .Range("a2:a999").SpecialCells(xlConstants)
Set gef = Range("A:A").Find(dat, , , xlWhole)
If gef Is Nothing Then
lz = Range("A" & Rows.Count).End(xlUp).Row + 1
Range("A" & lz) = dat
Range("B" & lz) = .Name
End If
Next dat
End With
Next sh
Range("A2:G" & lz).Sort Range("a2")
End Sub
Gruß, MCO

Anzeige
Danke und kleine Rükfrage
01.07.2014 10:46:57
Michael
Hallo MCO,
entschuldige bitte meine späte Rückmeldung. Ich hatte einfach keine Zeit.
Die Lösung ist super und erfüllt fast alle Anforderungen. Leider werden die Blattnamen in Spalte B hinterlegt. Wie kriege ich die denn in Zeile 1 (ab B1) rein?
Vielen Dank für Deine schöne Lösung und Gruß
Michael

AW: Danke und kleine Rükfrage
01.07.2014 11:33:58
MCO
Hallo!
Die Blattnamen hatte ich eigentlich nur zur Protokollierung reingeschrieben, damit man weiß, woher die Daten kommen.
Wenn du die in Zeile 1 analog in den Spalten zum Blattindex haben willst, sieht es so aus:
Sub Datum_holen()
lz = Range("A" & Rows.Count).End(xlUp).Row + 1
For sh = 2 To Sheets.Count
With Sheets(sh)
        Cells(1, sh) = .Name
For Each dat In .Range("a2:a999").SpecialCells(xlConstants)
Set gef = Range("A:A").Find(dat, , , xlWhole)
If gef Is Nothing Then
lz = Range("A" & Rows.Count).End(xlUp).Row + 1
Range("A" & lz) = dat
End If
Next dat
End With
Next sh
Range("B2").FormulaLocal = "=WENNFEHLER(SVERWEIS($A2;INDIREKT(""'""&B$1&""'!A1:B99"");2;0);"""") _
Range("B2").AutoFill Range("B2:B" & lz - 1)
lsp = Cells(1, Columns.Count).End(xlToLeft).Column
Range("B2:B" & lz - 1).AutoFill Range("B2", Cells(lz - 1, lsp))
Range("A2:G" & lz).Sort Range("a2")
End Sub
Außerdem hab ich die Formel aus dem ersten Beitrag noch automatisch eingefügt und auf den gesamten Bereich ausgeweitet.
Das kann allerdings zu längeren Rechenzeiten führen, wenn die Tabelle wächst.
Dann mußt du auf Dauer die Formeln durch die Werte ersetzen und nur die neuen Einträge über die Formel berechnen lassen.
Aber bis es so weit ist, bis du selbst in VBA fit genug:-)
Gruß, MCO

Anzeige
kleiner Fehler!
01.07.2014 14:20:34
Michael
Hallo MCO,
leider kommt ein kleiner Fehler:
wenn ich mehr als 9 Tabellenblätter habe und vor der Zusammenfassung noch andere Blätter hinterlege (die Inhalte sind nicht für diese Berechnung von Bedeutung).
Dann passt das wohl mit FOR sh = 1 to Sheets.Count nicht mehr?!?
Gruß und vielen Dank
Gruß
Michael

AW: kleiner Fehler!
02.07.2014 13:31:19
MCO
Hallo!
Ich hab jetzt 13 Reiter mit Inhalt ohne Probleme durchlaufen lassen.
Prüf bitte die Namensgebung deiner Reiter, evtl hat die Formel ein Problem damit.
Das Makro jedenfalls arbeitet wie es arbeiten soll.
Für nähere Analysen müsste ich Deine Datei sehen (ohne Echtdaten)...
Gruß, MCO

Anzeige
Beispieldatei zum Fehler
03.07.2014 06:28:23
Michael
Guten Morgen MCO,
entschuldige bitte den Aufwand. Anbei die gewünschte Datei mit dem Fehler:

Die Datei https://www.herber.de/bbs/user/91367.xlsm wurde aus Datenschutzgründen gelöscht


Es kommt immer die Meldung: Laufzeitfehler 1004
Keine Zellen gefunden
In der Zeile For sh = 2 To Sheets.Count
habe ich verschiedene Möglichkeiten probiert. Ohne Fachwissen hat das aber leider nicht zum gewünschten Erfolg geführt. (In der Datei mit Echtdaten können die Tabellenblätter mit den Daten zur Auswertung gänzlich unterschiedliche Namen haben!)
Vielen Dank und Gruß
Michael

Anzeige
AW: Beispieldatei zum Fehler
03.07.2014 08:43:30
MCO
Guten Morgen!
Der Fehler ist, das in dem Blatt einfach keine Daten drin stehen.
"For Each dat In .Range("a2:a999").SpecialCells(xlConstants)" wählt diese (nicht vorhandenen) Daten und läuft damit auf error.
Das stört aber eigentlich den logischen Ablauf nicht, daher kann man den Fehler mit folgendem Zusatz ignorieren / überspringen:
On Error Resume Next
Der Anfang des Codes sollte also jetzt so aussehen:
Sub Datum_holen()
lz = Range("A" & Rows.Count).End(xlUp).Row + 1
For sh = 2 To Sheets.Count
On Error Resume Next
With Sheets(sh)
Außerdem zählen wir ja die Sheets hoch (von 2 bis Anzahl Sheets)
Das bedeutet aber auch, dass die Zusammenfassung auf jeden Fall an erster Stelle zu stehen hat!
Du kannst den Reiter einfach rüberschieben.
Wenn das anders sein soll, muß man das im Code anpassen.
Gruß, MCO

Anzeige
nicht zu 100%
04.07.2014 07:16:33
Michael
Guten Morgen MCO,
in meiner Originaldatei klappt das leider noch nicht zu 100%.
Um allen Problemen künftig aus dem Weg zu gehen, hätte ich (vielleicht) folgende Idee, die ich jedoch leider nicht in VBA umsetzen kann:
Man hinterlegt alle Blattnamen, in denen sich die Daten für die Zusammenfassung befinden in einen benannten Bereich und greift dann im Makro nur auf die Blattnamen zu. (ich habe das mit for each probiert, aber nicht hin bekommen. Damit wäre die Position der Blätter belanglos.
Ist das mit einem vertretbaren Aufwand machbar?
Vielen Dank und Gruß
Michael
P.S. ich kann häufig, beruflich bedingt, nicht zeitnah antworten!!

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige