Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Postleitzahlen zusammenfügen und ungültige herausfiltern
#21
Hallo,

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.
Gruß Atilla
Antworten Top
#22
Hallo atilla!

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.

Vielen Dank! :15:
Antworten Top
#23
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)
Antworten Top
#24
Hier nochmal die Tabelle mit farblichen Hintergrund zu Verdeutlichung der einzelnen Bereiche


Angehängte Dateien
.xlsm   Excel_PLZ - Kopie.xlsm (Größe: 1,99 MB / Downloads: 5)
Antworten Top
#25
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.

Gruß
Antworten Top
#26
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)
Antworten Top
#27
Hallo,

ich musste den Code ganz neu entwickeln.

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
 
 With Sheets("1. ---> Daten einfügen")
   lngZSumme = .Cells(Rows.Count, 1).End(xlUp).Row
   lngSpalte = .Cells(5, .Columns.Count).End(xlToLeft).Column + 1
   strgZählen = .Range(.Cells(6, lngSpalte), .Cells(lngZSumme, lngSpalte)).Address
   strgSummen = .Range(.Cells(lngZSumme + 1, 2), .Cells(lngZSumme + 1, lngSpalte - 1)).Address
   .Range(strgZählen).FormulaLocal = "=Zählenwenn(" & strgBereich & ";A6)"
   .Range(strgZählen).Value = .Range(strgZählen).Value
   .Range(strgSummen).FormulaLocal = "=SUMMEWENN(" & strgZählen & ";0;B6:B2628)"
   feldSummen = .Range(strgSummen)
    .Range(strgSummen).Clear
   
   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("A5")
   .Rows("2:4").Copy Sheets("2. ---> Daten entnehmen").Range("A1")
   .AutoFilterMode = False
  .Range(strgZählen).Clear
 End With
 
 With Sheets("2. ---> Daten entnehmen")
   lngZZ = .Cells(.Rows.Count, 1).End(xlUp).Row
   feldUmsatz = .Range(.Cells(5, 2), .Cells(lngZZ, lngSpalte - 1))
   i = UBound(feldSummen)
   For j = 1 To lngSpalte - 2
     For i = 1 To lngZZ - 4
       feldUmsatz(i, j) = Application.WorksheetFunction.Round(feldUmsatz(i, j) + feldSummen(1, j) / (lngZZ - 4), 2)
     Next i
   Next j
   .Range(.Cells(5, 2), .Cells(lngZZ, lngSpalte - 1)) = feldUmsatz
   .Rows("1:4").Value = Sheets("1. ---> Daten einfügen").Rows("2:5").Value
   .Rows.Hidden = False
 End With

 Application.ScreenUpdating = True
End Sub

Ich habe den Code oberflächlich getestet.

Bitte selber genauer in einer Kopie Deiner Originaldatei testen!
Gruß Atilla
Antworten Top
#28
Hallo atilla,

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.

Vielen Dank!
Antworten Top
#29
Hallo,

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
 
 With Sheets("1. ---> Daten einfügen")
   lngZSumme = .Cells(Rows.Count, 1).End(xlUp).Row
   lngSpalte = .Cells(5, .Columns.Count).End(xlToLeft).Column + 1
   strgZählen = .Range(.Cells(6, lngSpalte), .Cells(lngZSumme, lngSpalte)).Address
   strgSummen = .Range(.Cells(lngZSumme + 1, 2), .Cells(lngZSumme + 1, lngSpalte - 1)).Address
   .Range(strgZählen).FormulaLocal = "=Zählenwenn(" & strgBereich & ";A6)"
   .Range(strgZählen).Value = .Range(strgZählen).Value
   .Range(strgSummen).FormulaLocal = "=SUMMEWENN(" & strgZählen & ";0;B6:B2628)"
   feldSummen = .Range(strgSummen)
    .Range(strgSummen).Clear
   
   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

 Application.ScreenUpdating = True
End Sub

Sub Überschriften()
 With Sheets("2. ---> Daten entnehmen")
  .Range("A1:V1") = Array("PLZ", "BV Gesamt 2014", "KV Gesamt 2014", "Gesamt 2014", "BV 01 Schlafen 2014", "KV 01 Schlafen 2014", "Gesamt 01 Schlafen 2014", "BV 02 Anbauwände 2014", "KV 02 Anbauwände 2014", "Gesamt 02 Anbauwände 2014", "BV 03 Küchen & Bäder 2014", "KV 03 Küchen & Bäder 2014", "Gesamt 03 Küchen & Bäder 2014", "BV 04 Polstermöbel 2014", "KV 04 Polstermöbel 2014", "Gesamt 04 Polstermöbel 2014", "BV 05 Kleinmöbel 2014", "KV 05 Kleinmöbel 2014", "Gesamt 05 Kleinmöbel 2014", "BV 06 Speisezimmer 2014", "KV 06 Speisezimmer 2014", "Gesamt 06 Speisezimmer 2014")
  .Range("W1:AQ1") = Array("BV 08 Mitnahme 2014", "KV 08 Mitnahme 2014", "Gesamt 08 Mitnahme 2014", "BV 09 KiBa 2014", "KV 09 KiBa 2014", "Gesamt 09 KiBa 2014", "BV 80 Leuchten 2014", "KV 80 Leuchten 2014", "Gesamt 80 Leuchten 2014", "BV 92 Bilder 2014", "KV 92 Bilder 2014", "Gesamt 92 Bilder 2014", "BV 93-97 Heimtex 2014", "KV 93-97 Heimtex 2014", "Gesamt 93-97 Heimtex 2014", "BV Boutique 2014", "KV Boutique 2014", "Gesamt Boutique 2014", "BV Orient 2014", "KV Orient 2014", "Gesamt Orient 2014")
  .Range("AR1:BL1") = Array("BV Gesamt 2015", "KV Gesamt 2015", "Gesamt 2015", "BV 01 Schlafen 2015", "KV 01 Schlafen 2015", "Gesamt 01 Schlafen 2015", "BV 02 Anbauwände 2015", "KV 02 Anbauwände 2015", "Gesamt 02 Anbauwände 2015", "BV 03 Küchen & Bäder 2015", "KV 03 Küchen & Bäder 2015", "Gesamt 03 Küchen & Bäder 2015", "BV 04 Polstermöbel 2015", "KV 04 Polstermöbel 2015", "Gesamt 04 Polstermöbel 2015", "BV 05 Kleinmöbel 2015", "KV 05 Kleinmöbel 2015", "Gesamt 05 Kleinmöbel 2015", "BV 06 Speisezimmer 2015", "KV 06 Speisezimmer 2015", "Gesamt 06 Speisezimmer 2015")
  .Range("BM1:CG1") = Array("BV 08 Mitnahme 2015", "KV 08 Mitnahme 2015", "Gesamt 08 Mitnahme 2015", "BV 09 KiBa 2015", "KV 09 KiBa 2015", "Gesamt 09 KiBa 2015", "BV 80 Leuchten 2015", "KV 80 Leuchten 2015", "Gesamt 80 Leuchten 2015", "BV 92 Bilder 2015", "KV 92 Bilder 2015", "Gesamt 92 Bilder 2015", "BV 93-97 Heimtex 2015", "KV 93-97 Heimtex 2015", "Gesamt 93-97 Heimtex 2015", "BV Boutique 2015", "KV Boutique 2015", "Gesamt Boutique 2015", "BV Orient 2015", "KV Orient 2015", "Gesamt Orient 2015")
  .Range("CH1:DA1") = Array("BV Gesamt 2016", "KV Gesamt 2016", "Gesamt 2016", "BV 01 Schlafen 2016", "KV 01 Schlafen 2016", "Gesamt 01 Schlafen 2016", "KV 02 Anbauwände 2016", "Gesamt 02 Anbauwände 2016", "BV 03 Küchen & Bäder 2016", "KV 03 Küchen & Bäder 2016", "Gesamt 03 Küchen & Bäder 2016", "BV 04 Polstermöbel 2016", "KV 04 Polstermöbel 2016", "Gesamt 04 Polstermöbel 2016", "BV 05 Kleinmöbel 2016", "KV 05 Kleinmöbel 2016", "Gesamt 05 Kleinmöbel 2016", "BV 06 Speisezimmer 2016", "KV 06 Speisezimmer 2016", "Gesamt 06 Speisezimmer 2016")
  .Range("DB1:DV1") = Array("BV 08 Mitnahme 2016", "KV 08 Mitnahme 2016", "Gesamt 08 Mitnahme 2016", "BV 09 KiBa 2016", "KV 09 KiBa 2016", "Gesamt 09 KiBa 2016", "BV 80 Leuchten 2016", "KV 80 Leuchten 2016", "Gesamt 80 Leuchten 2016", "BV 92 Bilder 2016", "KV 92 Bilder 2016", "Gesamt 92 Bilder 2016", "BV 93-97 Heimtex 2016", "KV 93-97 Heimtex 2016", "Gesamt 93-97 Heimtex 2016", "BV Boutique 2016", "KV Boutique 2016", "Gesamt Boutique 2016", "BV Orient 2016", "KV Orient 2016", "Gesamt Orient 2016")
  .Range("DW1:EP1") = Array("BV Gesamt 2017", "KV Gesamt 2017", "Gesamt 2017", "BV 01 Schlafen 2017", "KV 01 Schlafen 2017", "Gesamt 01 Schlafen 2017", "KV 02 Anbauwände 2017", "Gesamt 02 Anbauwände 2017", "BV 03 Küchen & Bäder 2017", "KV 03 Küchen & Bäder 2017", "Gesamt 03 Küchen & Bäder 2017", "BV 04 Polstermöbel 2017", "KV 04 Polstermöbel 2017", "Gesamt 04 Polstermöbel 2017", "BV 05 Kleinmöbel 2017", "KV 05 Kleinmöbel 2017", "Gesamt 05 Kleinmöbel 2017", "BV 06 Speisezimmer 2017", "KV 06 Speisezimmer 2017", "Gesamt 06 Speisezimmer 2017")
  .Range("EQ1:FK1") = Array("BV 08 Mitnahme 2017", "KV 08 Mitnahme 2017", "Gesamt 08 Mitnahme 2017", "BV 09 KiBa 2017", "KV 09 KiBa 2017", "Gesamt 09 KiBa 2017", "BV 80 Leuchten 2017", "KV 80 Leuchten 2017", "Gesamt 80 Leuchten 2017", "BV 92 Bilder 2017", "KV 92 Bilder 2017", "Gesamt 92 Bilder 2017", "BV 93-97 Heimtex 2017", "KV 93-97 Heimtex 2017", "Gesamt 93-97 Heimtex 2017", "BV Boutique 2017", "KV Boutique 2017", "Gesamt Boutique 2017", "BV Orient 2017", "KV Orient 2017", "Gesamt Orient 2017")
 End With
End Sub
Gruß Atilla
Antworten Top
#30
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.

Viele Grüße Dennis!


Angehängte Dateien Thumbnail(s)
   
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste