Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1900to1904
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

VBA Code Daten Filtern bis Datensatz 59.

VBA Code Daten Filtern bis Datensatz 59.
05.10.2022 09:09:30
Isabelle
Hallo lieber Comunity,
ich habe eine kleine Herausforderung. Wir haben eine riesige xls. Datei welche in verschiedene Bereiche gesplittert werden muss, je nach Suchkriterium,
Wir können in unserem weiterführenden System nur das Format 97-2003 verarbeiten, Problem hier - Daten nur bis 59.999.
Momentan mache ich das noch händisch, sprich:
Suchkriterium 1:
neues wbk, erstmal alle gefilterten da rein, dann weitere Bearbeitung, danach muss die Datei die 300.000 Zeilen hat in eben mind.5 zerlegt werden und neu gespeichert werden. Mit eben Datei 1 Datei 2 Datei 3 usw. Bis alle Daten gespeichert wurden in eben jeweils neue xls. 97-2003 max 59.999 Zeilen.
Habt ihr eine Idee, wie man dies realisieren kann? Die Daten kommen mit unregelmäßiger Größe also mal sind es 100.000 Zeilen mal 300.000 Zeilen.
Ich habe hier schon in einem anderen Forum nachgefragt und einen guten Code als Ansatz erhalten, aber ich komm damit nicht so wirklich weiter.
Das ist mein Ausgangscode wie ich derzeit alle Datein speichere:
ActiveSheet.Range("$A$1:$DA$313225").AutoFilter Field:=7, Criteria1:="Alles zusammen*"
Dim wkb, wkbnew As Workbook
Set wkb = ThisWorkbook
Rows("1:1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Set wkbnew = Application.Workbooks.Add
wkbnew.Sheets(1).Paste Destination:=wkbnew.Sheets(1).Range("$A$1")
wkbnew.SaveAs ".....\alles zusammen_heute_" & Format(Now, "DD.MM.YYYY") & ".xls", FileFormat:=xlExcel8
wkbnew.Close
Rows("2:2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
With ActiveSheet
If .FilterMode Then .ShowAllData
End With
und diesen Code hat ein User mir geschickt, wenn ich diesen implementiere, schneidet es bei mir jedoch bei der Erstellung der nächsten Datei immer die erste Zeile ab und darüber hinaus speichert es keine neue Datei, sondern will die erste Datei über speichern. Ich weiß, laut User Hilfe anderem Forum dass es nur zwei kleine Details sind, jedoch bin ich hier einfach noch zu unerfahren diese herauszufinden, Kann mir hier jemand helfen?
Sub M_snb()
Sheets.Add , Sheets(Sheets.Count)
For j = 0 To Sheets(1).UsedRange.Rows.Count \ 60000 + 1
Sheets(1).Cells(j * 60000 + 1, 1).Resize(60000, Sheets(1).UsedRange.Columns.Count).Copy Sheets(2).Cells(1)
Sheets(2).Copy
With ActiveWorkbook
.SaveAs "G:\OF\first.xls", 56
.Close
End With
Next
Es soll eben zum Schluss automatisch die entsprechenden Dateien erstellt werden:
Bei 180.000Zeilen eben drei, wobei überall die Zeile eins als Überschrift vorhanden sein muss, da das die Parameter zur Weiterverarbeitung sind.

Danke euch
Isabelle

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code Daten Filtern bis Datensatz 59.
05.10.2022 09:22:36
Daniel
Hi

Sheets(1).Rows(1).Copy Sheets(2).Cells(1, 1)
For j = 0 To Sheets(1).UsedRange.Rows.Count \ 60000 + 1
Sheets(1).Cells(j * 60000 + 2, 1).Resize(60000, Sheets(1).UsedRange.Columns.Count).Copy Sheets(2).Cells(2, 1)
Sheets(2).Copy
With ActiveWorkbook
.SaveAs "G:\OF\first" & Format(j + 1, "00") & ".xls", 56
.Close
End With
Gruß Daniel
Next
AW: VBA Code Daten Filtern bis Datensatz 59.
05.10.2022 10:12:20
Isabelle
Hallo Daniel,
vielen dank für die schnelle Antwort. Die erste Datei erstellt er jetzt genauso wie ich sie brauche. Er erstellt die erste Datei mit dem Name.. first. Die Ursprungsdatei enthält ja weiterhin Daten, also müsste er die ersten 59.999 löschen und dann die nächste Datei mit der Überschrift wieder erstellen mit dem nächsten Namen bis eben keine Daten mehr da sind und die Ursprungsdatei dann auch löschen. Kann man das irgendwie mit VBA lösen?
Workbooks.Open "Makroordner\grunddatei_" & Format(Now, "DD.MM.YYYY") & ".xlsx"
Sheets.Add , Sheets(Sheets.Count)
Columns("L:L").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("L2").Select
ActiveCell.FormulaR1C1 = "=LÄNGE(K2)"
Range("L2").Select
Range("L2").AutoFill Range("L2:L" & Cells(Rows.Count, 1).End(xlUp).Row)
Columns("M:M").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("M2").Select

Sheets(1).Rows(1).Copy Sheets(2).Cells(1, 1)
For j = 0 To Sheets(1).UsedRange.Rows.Count \ 59999 + 1
Sheets(1).Cells(j * 59999 + 2, 1).Resize(59999, Sheets(1).UsedRange.Columns.Count).Copy Sheets(2).Cells(2, 1)
Sheets(2).Copy
With ActiveWorkbook
.SaveAs "Makroordner\first" & Format(j + 1, "00") & ".xls", 56
.Close
End With
Next
Das ist jetzt mein angepasster Code.
Danke!
Gruß Isabelle
Anzeige
AW: VBA Code Daten Filtern bis Datensatz 59.
05.10.2022 13:17:39
Isabelle
Ich habe das Problem soweit selbst lösen können. danke für euer Feedback. Eine Frage habe ich jetzt nur noch. Wenn alle Dateien in die einzelnen Dateien gespeichert sind, bekomme ich eine Fehlermeldung. Logisch er findet ja keine Daten mehr. Wie kann ich den dies verhindern und ihn automatisch enden lassen? Also wenn keinen Daten vorhanden, dann beende und schließe die Datei?
Ich danke euch.
AW: VBA Code Daten Filtern bis Datensatz 59.
05.10.2022 23:13:54
Yal
Hallo Isabelle,
"unserem weiterführenden System nur das Format 97-2003 verarbeiten"...
Bei der Menge an Daten muss ich davon ausgehen, dass die Daten streng Datensatz-organisiert sind. Eine Spalte = ein Feld.
Stellt sich die Frage, ob diese weiterführende System nicht mit CSV zurecht kommen würde. Da würdest Du dir viele unnötige Mühe sparen.
VG
Yal
Anzeige
AW: VBA Code Daten Filtern bis Datensatz 59.
06.10.2022 06:52:33
Isabelle
Hallo Yal,
leider nicht. Das System akzeptiert nur 97-2003. Das wird sich auch nicht ändern. :-(
BG Isabelle
AW: VBA Code Daten Filtern bis Datensatz 59.
06.10.2022 13:56:43
Isabelle
Hat hier jemand einen Lösungsansatz für mich?
AW: VBA Code Daten Filtern bis Datensatz 59.
06.10.2022 14:56:23
Yal
Hallo Isabelle,
Du hast den Haken bei "Frage noch offen" vergessen: damit kann jeder sehen, dass in einer Frage noch Hilfe gebraucht wird.
Andere Weg: alle Zeilen in einer CSV-Datei exportieren. Nach 59.999te Zeile, neue Datei. Anschliessend diesen CSVs in Excel97 umwandeln

Sub Export()
'unter Anbidnung (Extras, Verweise..) von "Microsoft Scripting Runtime"
Dim Z As Range
Dim FSO As New FileSystemObject
Dim F As TextStream
Dim LineZaehler As Long
Dim DateiZaehler As Long
Const cExportPfad = "C:\Temp\Datei_"
Const cLineZaehlerMax = 59999
With Worksheets(1)
For Each Z In Range(.Range("A1"), .Cells(Rows.Count, 1).End(xlUp))
If LineZaehler = 0 Then
If Not F Is Nothing Then F.Close
DateiZaehler = DateiZaehler + 1
Set F = FSO.CreateTextFile(cExportPfad & Format(DateiZaehler, "0000") & ".csv")
LineZaehler = cLineZaehlerMax
End If
F.WriteLine Join(Application.Transpose(Application.Transpose(Z.EntireRow.Range("A1:DA1"))), ";")
LineZaehler = LineZaehler - 1
Next
End With
F.Close
End Sub
VG
Yal
Anzeige
AW: VBA Code Daten Filtern bis Datensatz 59.
07.10.2022 06:54:07
Isabelle
Guten Morgen Grundsätzlich eine gute Idee. Ich speichere es ja aus der Grunddatei erst einmal in eine normale xls. Arbeitsmappe, um es danach weiter bearbeiten zu können. 97-2003 hat ja leider pro Tabellenblatt nur 65.000 Zeilen alles danach wird abgeschnitten. Und genau das ist die Baustelle. Darüber hinaus ist das weiterführende System nur darauf ausgelegt, höchstens 60.000 Zeilen zu verarbeiten. Deswegen brauche ich hier die Lösung es eben in entsprechend viele neue Dateien zu speichern, die Code funktioniert ja auch, aber wenn die Datei dann nur noch einen Datensatz hat geht es nicht mehr, weil er keine Daten mehr findet, hier muss der Code eingebaut werden, eben wenn keine Daten mehr vorhanden bzw. nur noch erste Zeile, dann beende den Code . Momentan mache ich da manuell.
BG Isabelle
Anzeige
AW: VBA Code Daten Filtern bis Datensatz 59.
07.10.2022 09:32:21
Yal
Hallo Isabelle,
dann ermitteln wir wieviele Zeile der letzten Datei hätte, und wenn es weiniger als 3 sind, dann reduzieren die Anzahl an Zeile pro Datei. z.B. um 3.
Die Konversion in Excel 97-2003 (xlExcel8) habe ich auch eingebaut.

Sub Export()
'unter Anbidnung (Extras, Verweise..) von "Microsoft Scripting Runtime"
Dim Z As Range
Dim FSO As New FileSystemObject
Dim F As TextStream
Dim LineZaehler As Long
Dim DateiZaehler As Long
Dim ZeilenMax As Long
Dim WB As Workbook
Const cExportPfad = "C:\Temp\Datei_"
With Worksheets(1)
ZeilenMax = 59999
If (.Cells(Rows.Count, 1).End(xlUp).Row Mod ZeilenMax) 
VG
Yal
Anzeige
AW: VBA Code Daten Filtern bis Datensatz 59.
07.10.2022 14:01:29
Isabelle
Hi Yal,
danke für deinen Lösungsansatz, es zeigt mir hier immer einen Fehler bei Dim FSO As New FileSystemObject ? Benutzer definierter Typ nicht definiert...
Obwohl ich diesen ja definiert habe. Auch extra verweise hab ich berücksichtigt...:-(
BG Isabelle
AW: VBA Code Daten Filtern bis Datensatz 59.
07.10.2022 14:14:38
Yal
Hallo Isabelle,
prüfe dann nochmal, dass Du in dem richtigen VBA-Projekt (bei mehreren geöffneten Excels kann es schnell in einem andern sein) den Haken bei Microsoft Scripting Runtime gesetzt hast. Diese Fehlermeldung auf dieser Zeile kann nicht von was anderes kommen.
VG
Yal

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige