Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
504to508
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
504to508
504to508
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datenaufteilung

Datenaufteilung
24.10.2004 11:32:04
Helmut
Hallo VBA-Profis,
habe ein Problem mit dem in diesem Forum einige leicht fertig werden.
Habe mir in der Zwischenzeit zwar schon einige VBA-Kentnisse angeeignet - dank eurer Hilfe - aber mein Grenzbereich ist dabei leider noch sehr gering.
Folgende Ausgangssituation (in einem Excel File genauer beschrieben):
https://www.herber.de/bbs/user/12580.xls
Muss Daten nach Postleitzahlgebieten aufteilen. Dabei sind ca. bis zu 30.000 Datensätze enthalten und ich muss das wöchentlich aktualisieren.
Die PLZ ist in Spalte H enthalten. Die Postleitzahlgebiete sollen nach den ersten zwei Ziffern in eigene Arbeitsblätter (in der selben Arbeitsmappe)aufgeteilt werden, die gleichzeitig beschriftet werden.
Bitte um HILFE
Danke im voraus an alle die sich damit beschäftigen. Auch wenn kein Resultat rauskommt ;(

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenaufteilung
Helmut
Habe leider etwas vergessen, was auch noch optimal wäre.
Die Formatierung sollte vom bestehenden Arbeitsblatt übernommen werden und der Druckbereich sollte mit dem untersten Datensatz bei jedem neuen Arbeitsblatt festgelegt werden.
DANKE
lg
Helmut
AW: Datenaufteilung
24.10.2004 16:53:12
Helmut
Hallo Ransi,
er teilt es zwar auf, leider fügt er mir aber 90 leere Arbeitsblätter zusätzlich ein.
Die Formatierung wird leider auch nicht übernommen. Der Druckbereich is mir eigentlich Wurscht.
Aber weißt du für die ersten zwei Punkte eine Lösung.
Auf alle Fälle mal schönen Dank.
Ich werd selbst zwar auch noch herumbasteln, leider weiß ich aber, dass nicht besonders viel dabei herauskommen wird "heul"
lg
Helmut
Anzeige
AW: Datenaufteilung
ransi
hallo helmut
90 leere Blätter ? das wollte ich eigenlich hiermit vermeiden:
If Left(Worksheets(2).Name, 1) = "T" Then Worksheets(2).Delete
weil bei mir heisst das neue Tabellenblatt z.B. "Tabelle 182"
wenn die neuen blätter die bei dir eingefügt werden anders heissen, schreib anstatt "T" den ersten Buchstaben Von dem Blattnamen.
In der testdatei werden die farben und rahmen übernommen weil ja der komplette bereich "Worksheets("6012 Moordorf").Range(Cells(l, 1), Cells(l, 28))"
kopiert wird.
wenn du immer noch schwierigkeiten hast, und die datei keine vertraulichen daten hat,
(was ich leider glaube) lade doch mal die originaldatei hoch.
ransi
Anzeige
AW: Datenaufteilung
24.10.2004 17:19:55
Helmut
Hallo Ransi,
ich werd es mal versuchen.
Die Datei darf ich leider nicht hochladen. Würd ich gern, aber da würd ich eventuell ordentlich in der Scheiße stecken :)
Meld mich gleich wieder, wenn ich die Änderung getestet haben.
lg
Helmut
AW: Datenaufteilung
ransi
hallo helmut
dachte ich mir mit den daten.
teste mal dies hier:
ist auch noch der druckbereich mit drin.
Option Explicit

Private Sub CommandButton1_Click()
Call Mach_alles
End Sub

Public Sub Mach_alles()
Dim l As Long
Dim blatt As Integer
Dim plzahl As String
Dim Blt As String
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
For l = Range("H65536").End(xlUp).Row To 2 Step -1 'Blätter einfügen
On Error Resume Next
plzahl = Left(CStr(Cells(l, 8).Text), 2)
Worksheets.Add After:=Worksheets(1) 'Anstatt "6012 Moordorf" eine 1 gesetzt
Worksheets(2).Name = "PLZ " & plzahl & "xx"
If Left(Worksheets(2).Name, 1) = "T" Then Worksheets(2).Delete
Next
For blatt = Worksheets.Count To 2 Step -1 'überschriften holen
Worksheets(1).Range("a1:ab1").Copy
Worksheets(blatt).Range("a1:ab1").PasteSpecial Paste:=xlAll
Worksheets(blatt).Range("a1:ab1").PasteSpecial Paste:=xlPasteColumnWidths
For l = 2 To Worksheets(1).Range("H65536").End(xlUp).Row 'werte kopieren
plzahl = CStr(Left(Worksheets(1).Cells(l, 8).Text, 2))
Blt = Mid(CStr(Worksheets(blatt).Name), 5, 2)
If plzahl = Blt Then Worksheets(1).Range(Cells(l, 1), Cells(l, 28)).Copy _
Destination:=Worksheets(blatt).Cells(Worksheets(blatt).Range("d65536").End(xlUp).Row + 1, 1)
Next
Next
Call druckbereich 'druckbereich festlegen
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub
Sub druckbereich() 'Der Makrorekorder ist manchmal doch recht nützlich
Dim i As Integer
For i = 1 To Worksheets.Count
With Worksheets(i).PageSetup
.PrintTitleRows = "$1:$1"
.PrintTitleColumns = ""
.PrintArea = "$A$1:$AB$" & Worksheets(i).Range("d65536").End(xlUp).Row
.LeftHeader = ""
.CenterHeader = "Linz 4020 Gebiet 2" '? noch anpassen?
.RightHeader = ""
.LeftFooter = "VID:............................................"
.CenterFooter = "Bearbeitungswoche:............................"
.RightFooter = "Blatt &P von &N"
.LeftMargin = Application.InchesToPoints(0.275590551181102)
.RightMargin = Application.InchesToPoints(0.196850393700787)
.TopMargin = Application.InchesToPoints(0.984251968503937)
.BottomMargin = Application.InchesToPoints(0.984251968503937)
.HeaderMargin = Application.InchesToPoints(0.511811023622047)
.FooterMargin = Application.InchesToPoints(0.511811023622047)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 300
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 52
.PrintErrors = xlPrintErrorsDisplayed
End With
Next
End Sub
Anzeige
AW: Datenaufteilung
24.10.2004 18:27:58
Helmut
Hallo Ransi,
bei dem Code hängt sich mein Comp durchgehend auf.
Andere Möglichkeit.
Ich habe einen Code, der ist wirklich super, hat aber ein Problem.
Nach c. 2800 Datensätzen hängt sich der Copm auch auf.
Der zerlegt alle Postleitzahlen und schreibt sie in eigene ASrbeitsblätter.
Zusätzlich beschriftet er die Arbeitsblätter, formatiert sie und legt den Druckbereich fest.
Siehst du in dem Code eine Ungereimtheit, sodass er nur diese 2.800 Datensätze bearbeitet.
lg
Helmut
Code:

Sub Datenaufteilung_in_verschiedene_Arbeitsblätter()
ActiveSheet.Name = "Gesamtdaten"
Sheets("Gesamtdaten").Select
For Plz = 2 To Cells(Rows.Count, 8).End(xlUp).Row
Ort = Cells(Plz, 8) & " " & Cells(Plz, 9)
On Error Resume Next
Set ws = Sheets(Ort)
If Err > 0 Or ws Is Nothing Then
Sheets("Gesamtdaten").Copy After:=Sheets(Sheets.Count)
neuws = Sheets.Count
Sheets(neuws).Name = Ort
With Sheets(Ort)
lz = Cells(Rows.Count, 8).End(xlUp).Row
Range(Cells(2, 1), Cells(lz, 29)).Delete Shift:=xlUp
Sheets("Gesamtdaten").Select
End With
End If
On Error GoTo 0
lz = Sheets(Ort).Cells(Rows.Count, 8).End(xlUp).Row
Range(Cells(Plz, 1), Cells(Plz, 29)).Copy Sheets(Ort).Cells(lz + 1, 1)
Sheets(Ort).PageSetup.PrintArea = "$A$1:$AB$" & lz + 1
Next Plz
End Sub

Anzeige
besser kann ichs nicht !
ransi
hallo helmut
habe diesen code (optimierte version von eben) in deiner auf 20000 datensätze erweiterten beispieltabelle durchlaufen lassen.
Die tabelle hat 20000 datensätze mit zahlen in spalte H im bereich von 1000-9999 und in den anderen zellen buchstaben und ist aufsteigend sortiert.
der code erstellt die blätter und schafft die aufteilung der daten in die verschiedenen blätter in etwas über 2 minuten ohne fehler.
(pentium III mit 128 MB arbeitsspeicher)
allerdings hatte ich die druckbereich anpassung auskommentiert.
die dauert nämlich am längsten.
besser krieg ichs nicht.
rückmeldung wäre nett.
Option Explicit
Public

Sub Mach_alles()
Dim l As Long
Dim blatt As Integer
Dim plzahl As String
Dim Blt As String
Dim a As Long
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
For l = Range("H65536").End(xlUp).Row To 2 Step -1 'Blätter einfügen
If Left(Cells(l, 8), 2) = Left(Cells(l - 1, 8), 2) Then GoTo weiter
On Error Resume Next
plzahl = Left(CStr(Cells(l, 8).Text), 2)
Worksheets.Add After:=Worksheets(1) 'Anstatt "6012 Moordorf" eine 1 gesetzt
Worksheets(2).Name = "PLZ " & plzahl & "xx"
If Left(Worksheets(2).Name, 1) = "T" Then Worksheets(2).Delete 'hier anstatt T den ersten buchstaben deines tabellenblattes das eingefügt wird
weiter:
Next
a = 2
For blatt = 2 To Worksheets.Count  'überschriften holen
Worksheets(1).Range("a1:ab1").Copy
Worksheets(blatt).Range("a1:ab1").PasteSpecial Paste:=xlAll
Worksheets(blatt).Range("a1:ab1").PasteSpecial Paste:=xlPasteColumnWidths
For l = a To Worksheets(1).Range("H65536").End(xlUp).Row 'werte kopieren
plzahl = CStr(Left(Worksheets(1).Cells(l, 8).Text, 2))
Blt = Mid(CStr(Worksheets(blatt).Name), 5, 2)
If plzahl = Blt Then
Worksheets(1).Range(Cells(l, 1), Cells(l, 28)).Copy _
Destination:=Worksheets(blatt).Cells(Worksheets(blatt).Range("d65536").End(xlUp).Row + 1, 1)
End If
If plzahl > Blt Then
a = l
Exit For
End If
Next
Worksheets(blatt).Rows("2:" & Worksheets(blatt).Range("d65536").End(xlUp).Row + 1).RowHeight = 35 'zeilenhöhe einstellen
Next
'Call druckbereich 'druckbereich festlegen
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub


Sub druckbereich() 'Der Makrorekorder ist manchmal doch recht nützlich
Dim i As Integer
For i = 1 To Worksheets.Count
With Worksheets(i).PageSetup
.PrintTitleRows = "$1:$1"
.PrintTitleColumns = ""
.PrintArea = "$A$1:$AB$" & Worksheets(i).Range("d65536").End(xlUp).Row
.LeftHeader = ""
.CenterHeader = "Linz 4020 Gebiet 2"   '? noch anpassen?
.RightHeader = ""
.LeftFooter = "VID:............................................"
.CenterFooter = "Bearbeitungswoche:............................"
.RightFooter = "Blatt &P von &N"
.LeftMargin = Application.InchesToPoints(0.275590551181102)
.RightMargin = Application.InchesToPoints(0.196850393700787)
.TopMargin = Application.InchesToPoints(0.984251968503937)
.BottomMargin = Application.InchesToPoints(0.984251968503937)
.HeaderMargin = Application.InchesToPoints(0.511811023622047)
.FooterMargin = Application.InchesToPoints(0.511811023622047)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 300
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 52
.PrintErrors = xlPrintErrorsDisplayed
End With
Next
End Sub

ransi
Anzeige
AW: besser kann ichs nicht !
Helmut
Hallo Ransi,
ich glaub, dass entweder mein neuer Comp, Excel oder ich spinnen - oder alles gemeinsam.
Nein im ernst - mein Comp hat sowieso irgend ein Problem - obwohl er ganz neu ist - oder eben deswegen :)
Ich werde die Codes auf einem anderen PC testen.
Bei mir funktioniert nichts ;(
Werd mich wegen Ergebnis auf alle Fälle noch melden.
thx und bis zum nächsten Mal!
Helmut
aw
ransi
hallo helmut
Auch nicht wenn du mit F8 im editor die befehle einzeln durchblätterst?
beim normalen durchlauf von dem code sollte man auch nicht sehen das etwas passiert.
erst das fertige ergebniss.
aber wie gesagt: 20000 datensätze brauchen eine weile. bis auf die sanduhr sieht man nicht das etwas passiert.
With Application
.ScreenUpdating = False 'schaltet die bildschirmaktualisierung aus
.DisplayAlerts = False
End With
ransi
Anzeige
AW: aw
26.10.2004 13:38:26
Helmut
Hallo Ransi,
hatte ein Problem mit meinem Excel Programm.
Bei meinem Partner läuft der Code astrein. Wir haben es noch ein bisserl umgewandelt. Deine Inputs waren Gold wert.
Danke noch mal
Helmut
freut mich wenns denn doch noch klappt...o.T.
ransi

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige