oje, die Datei hat aber auch nicht mit der ersten zu tun.
Und verstanden habe ich auch nichts. Wo sind zu jeder PLZ Umsätze?
Oder wie sollen Umsätze, die stehen anscheinend in der Zeile 5 als Gesamtsumme für alle drin,
aber wie sollen sie dann mit den einzelnen PLZ in Verbindung gebracht werden?
Zeig mal ein Ergebnis, und zeig wie Du zu diesem Ergebnis kommst.
Deine Erklärungen müssen besser werden, sonst wird das Ganze sehr mühselig für mich.
Mühselig bedeutet Verlust an Spaß an der Sache.
Solche Dinge, wie warum eine Gruppe Umsatz hat oder nicht, sind für den Ablauf nicht wichtig und brauchen nicht erwähnt werden.
Nur Dinge aufführen, die für das Verständnis des Problems wichtig sind und den Ablauf verständlich machen.
Das tut mir leid dass ich mich nicht verständlich genug ausgedrückt habe.
An sich ist das ganz einfach. In Spalte A stehen die gesamten Postleitzahlen, in denen Umsatz geflossen ist. Daher müssen diese vorab sortiert werden (so wie in deinem
2. Code – das hat auch richtig funktioniert und so wie ich mir das vorgestellt habe).
Nun kommen wir zu den Umsätzen, In meiner Musterdatei befand sich auf dem ersten Tabellenblatt eine Spalte mit Umsätzen und diese wurden auch richtig zugeordnet
und bearbeitet. Also ist dein 2. Code für meine Musterdatei genau richtig.
Nun kommen wir zu der Originaldatei, die ich heute Morgen zu Verfügung gestellt habe. Diese wirkt auf dem ersten Blick erst einmal sehr kompliziert, da keine Tabellenlinien
vorhanden sind. Spalte A: Postleitzahlen, wie oben beschrieben. Spalte B-D z. B. sind die kumulierten Gesamtumsätze aus dem Jahr 2014 (Spalte E-AQ). Dann kommen die
einzelnen Warengruppen z.B. Warengruppe „01 Schlafen“ (Spalte E-G). Jede Warengruppe besteht immer aus 3 Spalten unterteilt in Barverkäufen, Kommissionen und
Gesamtumsatz. In Zeile 5 steht der kumulierte Wert aus den gesamten Postleitzahlen je Warengruppe.
Es geht jetzt eigentlich nur darum das die Formatierung erweitert wird, also mehrere Spalten mit Umsätzen dazugekommen sind. Also nicht mehr eine Spalte zahlen sondern
bis Spalte FK. Die ersten Werte für die Postleitzahlen stehen in A6 und die ersten Werte für die Umsätze in B6. Bei der Formatierung sollte darauf geachtet werden, dass die
Zeile 5 mit auf das 2. Tabellenblatt in die erste Zeile kopiert wird. Da es die Gesamtsummen, der darunter stehenden sind.
Ansonsten können wir mal gerne telefonieren, da es vielleicht doch einfacher ist, dieses zu erklären.
Moin!
Mich würde mal interessieren, woher die falschen PLZ kommen.
Frage der Kassiererin nach der PLZ des Kunden?
Dann wäre eher eine Überarbeitung der Kassensoftware angebracht.
Siehe dazu auch meinen Beitrag von gestern 9:41, auf den Du nicht geantwortet hast.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Hallo Ralf,
vielen Dank für die Info. Die PLZ wurden falscha aufgenommen und können im Nachgang nichtmehr bearbeitet werden. Daher müssen wir das auf diesem Weg lösen.
18.01.2017, 12:36 (Dieser Beitrag wurde zuletzt bearbeitet: 18.01.2017, 12:36 von RPP63.)
EDIT:
In Ordnung, da gibt es ja Helfer, die an der Sache dran sind.
Ändert aber nichts an der Tatsache, dass für die Zukunft Falscheingaben verhindert werden müssen.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Der Code gehört nicht da hin, wo Du es stehen hattest.
Mit der Msgbox beim Öffnen der Datei ist es an der richtigen Stelle.
Mein Code gehört in ein allgemeines Modul.
In der VBA Umgebung im Menü "Einfügen" -> "Modul" auswählen und den Code dort einfügen.
Code:
Option Explicit
Sub aufsummieren_und_verteilen()
Dim i As Long, j As Long
Dim lngSpalte As Long, lngZZ As Long
Dim lngZSumme As Long, lngZPlz As Long
Dim strgBereich As String, strgZählen As String, strgSummen
Dim feldSummen
Dim feldUmsatz
Sheets("2. ---> Daten entnehmen").Cells.Clear
Application.ScreenUpdating = False
With Sheets("PLZ nicht verändern")
lngZPlz = .Cells(Rows.Count, 1).End(xlUp).Row
strgBereich = "'PLZ nicht verändern'!" & .Range("A2:A" & lngZPlz).Address
End With
If .AutoFilterMode = True Then
If .FilterMode = True Then .ShowAllData
.Range("$A$1:$FN$2629").AutoFilter Field:=170, Criteria1:=">0", _
Operator:=xlAnd
Else
.Range("$A$1:$FN$2629").AutoFilter Field:=170, Criteria1:=">0", _
Operator:=xlAnd
End If
vielen herzlichen Dank für Deine Bemühungen. Ein paar Kleinigkeiten habe ich noch:
Schau dir mal bitte meinen Code an, bzgl. der ersten Zeile. Diese muss in der ersten Zeile folgendes beinhalten: A1: PLZ B1:BV Gesamt 2014 C1: KV Gesamt 2014 D1: Gesamt 2014 E1: V 01 Schlafen 2014 F1: KV 01 Schlafen 2014 G1: Gesamt 01 Schlafen 2014 usw.
Das was nun in deinem Code in Zeile 4 steht muss dann in die zweite Zeile wandern und alle Postleitzahlen sowie Umsätze müssen mit übernommen werden. So wie in deinem ersten
Lösungsvorschlag mit den PLZ.
Hab jetzt Deine Überschriften in eine extra Routine gepackt. Da kann man sie leichter ändern.
alles Code in ein Modul:
Code:
Sub aufsummieren_und_verteilen()
Dim i As Long, j As Long
Dim lngSpalte As Long, lngZZ As Long
Dim lngZSumme As Long, lngZPlz As Long
Dim strgBereich As String, strgZählen As String, strgSummen
Dim feldSummen
Dim feldUmsatz
Sheets("2. ---> Daten entnehmen").Cells.Clear
Application.ScreenUpdating = False
With Sheets("PLZ nicht verändern")
lngZPlz = .Cells(Rows.Count, 1).End(xlUp).Row
strgBereich = "'PLZ nicht verändern'!" & .Range("A2:A" & lngZPlz).Address
End With
If .AutoFilterMode = True Then
If .FilterMode = True Then .ShowAllData
.Range("$A$1:$FN$2629").AutoFilter Field:=170, Criteria1:=">0", _
Operator:=xlAnd
Else
.Range("$A$1:$FN$2629").AutoFilter Field:=170, Criteria1:=">0", _
Operator:=xlAnd
End If
Sheets("2. ---> Daten entnehmen").Cells.Clear
.AutoFilter.Range.Offset(1, 0).Resize(, .AutoFilter.Range.Columns.Count - 1).Copy Sheets("2. ---> Daten entnehmen").Range("A2")
.AutoFilterMode = False
.Range(strgZählen).Clear
End With
With Sheets("2. ---> Daten entnehmen")
lngZZ = .Cells(.Rows.Count, 1).End(xlUp).Row
feldUmsatz = .Range(.Cells(2, 2), .Cells(lngZZ, lngSpalte - 1))
i = UBound(feldSummen)
For j = 1 To lngSpalte - 2
For i = 1 To lngZZ - 1
feldUmsatz(i, j) = Application.WorksheetFunction.Round(feldUmsatz(i, j) + feldSummen(1, j) / (lngZZ - 4), 2)
Next i
Next j
.Range(.Cells(2, 2), .Cells(lngZZ, lngSpalte - 1)) = feldUmsatz
Überschriften
.Rows.Hidden = False
End With
19.01.2017, 09:25 (Dieser Beitrag wurde zuletzt bearbeitet: 19.01.2017, 09:31 von dennis1793.)
Guten Morgen atilla!
Ich bin noch nicht ganz zufrieden oder ich habe den Code falsch eingegeben :/
Schau dir mal bitte das Bild an, was ich verknüpft habe. So sollte die 2. Seite nach der Bearbeitung aussehen. Kannst du dir das noch einmal bitte ansehen, damit es perfekt ist und ich damit arbeiten kann :74:
Besteht die Möglichkeit als „Leihe“ selber so einen Code zu schreiben? Oder bauen die Codes immer auf einander auf? Wie gesagt kenne ich mich damit leider überhaupt nicht aus und würde s gerne lernen, da es die Arbeit um einiges erleichtert.