nachdem ich aus einer Textdatei in Spalte A Zahlen importiert habe (65535 an der Zahl), möchte ich gerne die Zahlen so verteilen, dass die Zahlen aus der Spalte A, ab dem Seitenumbruch auf die Spalten B-E verteilt werden. Alle nachfolgenden Zahlen sollen jetzt aufrücken um dann für die nächste Seite den Vorgang zu wiederholen. Sinn des ganzen ist, daß ich für den Ausdruck nicht > 1100 Seiten brauche. :)
Ich fürchte, das wird nur über VBA zu lösen sein, oder gibt es da ein Hausmittel in der Excel-Apotheke?
Sub Read_Big_File()
'Liest csv und txt Datein mit mehr als 65536 Datensätzen ein
'Der eingelesene Text wird in die aktuelle Tabelle
'beginnedn ab Spalte 1 geschrieben
'------------------------------
'Hilfsvariable für Anzahl Datensätze
Dim Text1 As String
'Variablen für den Array nötig
Dim txtLines As Long, i As Long, n As Long
'Neue Mappe und Variables Tabellenblatt deklarieren
Dim tWkb As Workbook, tWks As String
Dim tarRow As Integer, tarCol As Integer, maxLines
'Für Office97 muss das Array TextArr als String definiert werden
'Entdeckt duch Gerd Z aus dem Herber Forum
Dim TextArr As Variant
Dim ReadFile As String
Dim OldStatusbar
'*******************
'Standardanzahl Zeilen von EXCEL
'sind etwa 56 Zeilen pro Seite
'Bitte anpassen
maxLines = 56
'********************
'Hier nichts mehr ändern
'Dialog öffnen auf Basis von *.dat Files
ReadFile = Application.GetOpenFilename("CSV Files (*.csv;*.txt),")
'Schliessen einer geöffneten Datei
Close #1
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open ReadFile For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
txtLines = 0
Do While Not EOF(1) ' Schleife bis Dateiende.
Input #1, Text1 ' Hilfsvariable zum einlesen verwenden
'Zähler hochzählen
txtLines = txtLines + 1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close #1
'Erneutes Öffnen um zum Dateianfang zu kommen
Open ReadFile For Input As #1 ' Datei zum Einlesen öffnen.
'Array neu auf die Anzahl der Linien initialisieren
ReDim TextArr(txtLines)
'Einlesen der Dateien in das Array
For i = 1 To txtLines
Input #1, TextArr(i)
Next i
Close #1
OldStatusbar = Application.DisplayStatusBar
'Namen vergeben
Worksheets(1).Name = "Data1"
tWks = tWkb.Worksheets(1).Name
'Daten in aktuelles Sheet schreiben
n = 1
tarRow = 1
tarCol = 1
Application.ScreenUpdating = False
For i = 1 To txtLines
Application.StatusBar = "Datensatz " & i & " von " & txtLines & " wird eingelesen"
'Neue Tabelle anlegen wenn Zelle 65536 erreicht wurde
If i Mod maxLines = 0 Then
Cells(tarRow, tarCol) = TextArr(i)
tarRow = 1
tarCol = tarCol + 1
Else
Cells(tarRow, tarCol) = TextArr(i)
tarRow = tarRow + 1
End If
Next i
Application.ScreenUpdating = True
MsgBox ReadFile & " mit " & txtLines & " Datensätzen vollständig eingelesen"
Application.DisplayStatusBar = OldStatusbar
End Sub
Gruss Rainer
Betrifft: AW: Zahlen umsortieren
von: David
Geschrieben am: 10.01.2007 08:10:43
Hallo Rainer,
dein Makro ist ja der pure Luxus, es übernimmt sogar den Import. Leider steigt das Script noch vor dem Import, aus für mich nicht ersichtlichen Gründen, aus.
Laufzeitfehler '91':
Objektvariable oder Width-Blockvariable nicht festgelegt.
der Debugger hüpft in folgende Zeile:
tWks = tWkb.Worksheets(1).Name
Ab da musste ich dann die Segel streichen.
Dennoch, tausend Dank für deine Mühe.
Gruß
David
Betrifft: AW: Zahlen umsortieren
von: Ramses
Geschrieben am: 10.01.2007 16:30:43
Hallo
Sorry,... das war ein Rest :-)
Lösche diese Zeile
tWks = tWkb.Worksheets(1).Name
Die ist nicht mehr nötig.
Gruss Rainer
Betrifft: AW: Zahlen umsortieren
von: fcs
Geschrieben am: 09.01.2007 16:43:37
Hallo David,
folgendes Makro sortiert die Daten in ein neues Blatt um.
Die max. Zeilenzahl je Seite muss du ggf. noch anpassen, da diese von den Seitenrand-Einstellungen abhängig ist.
Gruß
Franz
Sub umsortieren()
'Gibt die Daten der Spalte A in einem neuen Blatt in 6 Spalten aus
Dim wksQ As Worksheet, wksZ As Worksheet
Dim ZeileQ As Long, ZeileZ As Long, Spalte As Integer, ZeileQletzte As Long
Dim ZeilenSeite As Integer, SpaltenSeite As Integer, Titelzeilen As Integer
Titelzeilen = 0 ' Anzahl Titelzeilen in Quell- und Zieltabelle
SpaltenSeite = 6 ' Anzahl Spalten in Zieltabelle
ZeilenSeite = 50 ' Anzahl Zeilen je Seite in Zieltabelle
Set wksQ = ActiveSheet
ActiveWorkbook.Worksheets.Add
Set wksZ = ActiveSheet
If IsEmpty(wksQ.Cells(wksQ.Rows.Count, 1)) Then
ZeileQletzte = wksQ.Cells(wksQ.Rows.Count, 1).End(xlUp).Row
Else
ZeileQletzte = wksQ.Rows.Count 'Alle Zeilen ausgefüllt
End If
If Titelzeilen > 0 Then
wksZ.PageSetup.PrintTitleRows = "$1:$" & Titelzeilen
End If
ZeileQ = Titelzeilen
ZeileZ = Titelzeilen
Do
For Spalte = 1 To SpaltenSeite
For Zeile = 1 To ZeilenSeite - Titelzeilen
ZeileQ = ZeileQ + 1
If ZeileQ >= ZeileQletzte Then Exit Do
wksZ.Cells(ZeileZ + Zeile, Spalte).Value = wksQ.Cells(ZeileQ, 1).Value
Next
Next
ZeileZ = ZeileZ + ZeilenSeite - Titelzeilen
wksZ.Rows(ZeileZ + 1).PageBreak = xlPageBreakManual
Loop
End Sub

 |
Betrifft: AW: Zahlen umsortieren
von: David
Geschrieben am: 10.01.2007 08:00:45
Hallo Franz,
Vielen Dank für die schnelle Hilfe, das Makro läuft einwandfrei. Von mehr als 1100 Seiten bin ich jetzt auf knapp 200, das ist besser als ich zu hoffen gewagt habe :)
Gruß
David