Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
948to952
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
948to952
948to952
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Eine Spalte in mehrere aufteilen.
09.02.2008 19:36:15
Berth
Liebe Excel-Freunde,
Ich führe kontinuierliche Messungen an einem Gerät durch und erhalte ein ASCII-File mit ungefähr 1000000-Werten. Diese möchte ich aufteilen in Spalten zu je 10000 Werten. In Excel lässt sich mein Ausgangsfile (mit 1000000 Werten) nicht vollständig öffnen, da nur etwa 65000 Zeilen zur verfügung stehen.
Ich öffne nun das Dokument mit dem Editor und kopiere immer je 10000 Werte per Hand in die Tabelle. Dies ist sehr aufwendig und zeitintensiv. Gibt es eine Möglichkeit die mit VBA zu automatisieren?
Vielen Dank für Eure Hilfe und viele Grüße
Berth

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eine Spalte in mehrere aufteilen.
09.02.2008 20:12:43
Tino
Hallo,
mit dieser Funktion (ist eine Möglichkeit) müsste etwas zu machen sein.
'Cmd = Pfad zur Datei

Function Cmd_Auswertung(Cmd As String)
Dim I As Integer
Dim Intfilenummer As Integer
Dim StrInput As String
Dim TextZeile As Variant
Dim einfügZEile As Variant, LeseabZeile As Variant
LeseabZeile = 3000 'ab welcher Zeile einlesen
einfügZEile = 5  'ab welcher Zeile einfügen
einfügZEile = einfügZEile - 1
On Error GoTo Fehler
TextZeile = 0
Intfilenummer = FreeFile
Open Cmd For Input As #Intfilenummer
While Not EOF(Intfilenummer)
TextZeile = TextZeile + 1
Line Input #Intfilenummer, StrInput
If TextZeile 


sonst müsstest du mal eine Textdatei(ausschnitt) reinstellen und angeben wie diese in der Exceldatei
eingfügt wrden soll.
Gruß
Tino

Anzeige
AW: Eine Spalte in mehrere aufteilen.
09.02.2008 21:28:49
Berth
Hallo Tino,
vielen Dank für Deine Mühe. Im Anhang habe ich eine Exceldatei und die Datei mit meinen Messwerten angefügt:
https://www.herber.de/bbs/user/49779.xls
https://www.herber.de/bbs/user/49780.txt
Die Exceldatei enthält in der ersten Spalte die Zeit, die zu den jeweiligen Messwerten gehört und die der ersten Spalte in der .txt-Datei entspricht. Zweite Spalte der Excel-Datei entspricht den ersten 10000 Messwerten, die in der zweiten Spalte der txt.-Datei zu finden sind. In der dritten Spalte sind die nächsten 10000 Messwerte die ebenfalls in der zweiten Spalte der txt.-Datei zu finden sind.
Bitte beachte, dass ich in der Excel-Datei nur die ersten Messwerte angegeben habe und in der txt.-Datei immer nur die ersten und die letzten einer Gruppe angegeben habe, da sonst die Dateigröße 300 kB bei weitem überschreitet.
Hauptproblem ist noch, wie ich die Werte aus der zweiten Spalte in der txt.-Datei kopieren kann.
Viele Grüße
Berth

Anzeige
AW: Eine Spalte in mehrere aufteilen.
09.02.2008 23:03:00
Tino
Hallo Berth,
kannst du hiermit etwas anfangen?(Zip Datei entpacken)
Drücke Butten auf Tabelle2.
https://www.herber.de/bbs/user/49783.zip
Gruß
Tino

AW: Eine Spalte in mehrere aufteilen.
09.02.2008 23:29:46
fcs
Hallo Berth,
hier eine Lösung, die ich für Datenimport verwende, angepasst an deine Textdatei.
Getestet hab ich nur mit einer kleinen Textdatei, ob 1.000.000 Datenzeilen problemlos verarbeitet werden weiss ich nicht.
Ich hab es so programmiert, dass der Punkt in der Textdatei als Dezimalstelle verarbeitet wird. ggf. muss das noch angepasst werden.
Gruß
Franz

Sub FileImport()
'Zeilenweiser Import eines großen Textfiles in Excel-Tabellenblätter
Dim Zeile As Long, wksNeu As Worksheet, wbNeu As Workbook, BlattNr As Integer
Dim FF As Integer, strText As String, ZeilenBlatt As Long, varDatei, varTest
Dim strNameText As String, Spalte As Integer, var1 As String, var2 As String
varDatei = Application.GetOpenFilename(Filefilter:="Alle (*.*),*.*", _
Title:="Bitte ASCII-Datendatei auswählen", MultiSelect:=False)
If varDatei = False Then GoTo Ende
ZeilenBlatt = Val(InputBox("Anzahl Datenzeilen je Spalte?", _
"ASCII-Daten einlesen", 10000))
If ZeilenBlatt = 0 Then GoTo Ende 'Abbrechen wurde gewählt
Set wbNeu = Workbooks.Add(Template:=xlWBATWorksheet)
Set wksNeu = wbNeu.Worksheets(1)
If ZeilenBlatt > wksNeu.Rows.Count Then
MsgBox "Zeilenzahl pro Blatt muss  "" Then wksNeu.Cells(Zeile, Spalte) = CDbl(var1)
If var2  "" Then wksNeu.Cells(Zeile, Spalte + 1) = CDbl(var2)
Else
var2 = Trim(Mid(strText, 9)) 'Wert
var2 = Application.WorksheetFunction.Substitute(var2, ".", ",")
If var2  "" Then wksNeu.Cells(Zeile, Spalte) = CDbl(var2)
End If
Next
'wbNeu.Save 'NeueDatei speichern
'Fortschritt in Statuszeile anzeigen und Zahlenformat der Spalten
If Spalte = 1 Then
Application.StatusBar = (BlattNr - 1) * 254 + ZeilenBlatt _
& " Datensätze eingelesen!"
wksNeu.Columns(1).NumberFormat = "#,##0.0"
wksNeu.Columns(2).NumberFormat = "#,##0.000"
Spalte = Spalte + 2
Else
Application.StatusBar = (BlattNr - 1) * 254 + (Spalte - 1) * ZeilenBlatt _
& " Datensätze eingelesen!"
wksNeu.Columns(Spalte).NumberFormat = "#,##0.000"
Spalte = Spalte + 1
End If
'Weiteres Blatt einfügen, wenn alle Spalten gefüllt sind
If Spalte > wksNeu.Columns.Count Then
Spalte = 1
Set wksNeu = wbNeu.Worksheets.Add(after:=wbNeu.Sheets(strNameText & _
Format(BlattNr, "000")), Type:=xlWorksheet)
BlattNr = BlattNr + 1
wksNeu.Name = strNameText & Format(BlattNr, "000")
End If
Loop
Close #FF
Application.StatusBar = False
Application.ScreenUpdating = True
wbNeu.Save 'NeueDatei speichern
MsgBox "Daten wurden eingelesen!"
Ende:
Set wbNeu = Nothing: Set wksNeu = Nothing
End Sub


Anzeige
AW: Eine Spalte in mehrere aufteilen.
10.02.2008 10:30:00
Berth
Hallo Tino und Franz,
Eure Vorschläge funktionieren prima. Ich habe beide in mein Excel-File eingebaut und freue mich, dass alles so gut funktioniert. Vielen Dank für Eure Mühe.
Berth

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige