Herbers Excel-Forum - das Archiv

Zahlen umsortieren

Bild

Betrifft: Zahlen umsortieren
von: David

Geschrieben am: 09.01.2007 15:30:33
Hallo Forum,
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. :)
Mit Kopieren und Einfügen, brauche ich dafür vermutlich mehrere Wochen
Ich fürchte, das wird nur über VBA zu lösen sein, oder gibt es da ein Hausmittel in der Excel-Apotheke?
Vielen Dank
David
Bild

Betrifft: AW: Zahlen umsortieren
von: Ramses

Geschrieben am: 09.01.2007 16:04:07
Hallo
den Code in ein Modul deiner Mappe kopieren und ausführen lassen
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
Bild

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
Bild

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
Bild

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

Bild

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
 Bild
Excel-Beispiele zum Thema "Zahlen umsortieren"
Vorkommen von Zahlenreihen in Spalten Zeichenfolgen in Zahlen nach Textimport
Zahlenformatierung mit Punkt nach der 1. Ziffer Namen von TextBoxes hochzählen
Zählen formatierter Zellen Autofilter auch mit Ziffern von Zahlen
Addition der absoluten Zahlen Eingabe von positiven Zahlen erzwingen
Zufallszahlen generieren, die sich nicht wiederholen Summenformel unter Zahlenreihe eintragen