3k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen,

ich habe ca. 1000 .ASC files mit Daten, die ich alle in eine Excel-file eintragen möchte um ein einziges Diagramm daraus zu machen. Alle Dateien einzeln zu öffnen dauert zu viel Zeit und ist auch eine zumutung. Leider kenne ich mit Makros nicht besonders gut aus und hoffe ihr könnt mir dabei helfen.

Wie schon oben genannt habe ich ca 1000 .ASC Dateien mit unterschiedlichem Dateinamen. Wenn ich die Datei öffne erhalte ich in Spalte A das Datum mit Uhrzeit und ind Spalte B eine Temperatur. Die Tabellenblätter sind gleich benannt wie die Datei. Von Zeile 8 bis 1007 sollen die Daten aus jeder .ASC Datei aus dem Ordner kopiert werden und in eine seperate Datei untereinander eingefügt werden. Hieraus soll anschließend ein Diagramm erstellt werden.

Benötige ich ein zusätzliches Makro, das die .ASC Dateien erst in .xls Dateien umwandelt?

Ich verwende Office 2003.

Ich hoffe mir kann bei meinem Problem jemand helfen. Falls es noch Fragen gibt einfach kurz anschreiben.

6 Antworten

0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo,

das Öffnen der Dateien und das Einlesen sollte nicht das Problem darstellen (Eine Vermutung, da ich die .ASC Dateien nicht kenne), aber das größere Problem liegt eher in der Datenmenge. Excel 2003 unterstützzt nur 65536 Zeilen. Bei Dir kommen aber ca. 999000 Zeilen zusammen, was nicht mehr auf ein Tabellenblatt passt.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von
Die Datenmenge kann ich noch reduzieren auf 96 Dateien, da es sich hierbei um mehrere Temperatursensoren geht.
Dennoch komme ich dann ja auf ca 96000 Zeilen, was immernoch zu viel ist. Wäre es möglich das Makro so zu schreiben dass nur von einer bestimmten Anzahl Dateien die Daten kopiert werden?
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Namenloser,

das kann man schon realisieren. Allerdings müsstest Du sagen, welche Daten, z.B. von welcher Zeile, die Daten kopiert werden. Eventuell kannst Du ja mal 1 oder 2 von den .ASC Dateien z.B. http://www.file-upload.net/ hochladen und uns den Link, den Du erhälst hier mitteilen, damit man sich die Datei mal ansehen kann.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von
Hallo coros,
hier mal den Link zu einer Datei http://www.file-upload.net/download-2850795/Bauteiltemperatur-1_0014.ASC.html
Alle Dateien sehen gleich aus.
Ich benötige das Datum+Uhrzeit und die Temperatur. Die anzahl der Daten kann ich soweit reduzieren dass die maximale menge nicht überschritten wird.
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Namenloser,

nachfolgend mal ein Makro, dass Dir alle ASC-Dateien in einem vorgegebenen Verzeichnis in ein neu angelegtes Tabellenblatt einließt.

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

Option Explicit

Const intAnzahlAnfang As Integer = 8
Const intAnzahlEnde As Integer = 10
Const strPath As String = "H:\Müll\"

Sub Dateien_auslesen()
Dim strExportfile As String
Dim strWert() As String
Dim strZeile As String
Dim strText As String

Dim intDateinummer As Integer
Dim intWert As Integer

Dim lngFirstRow As Long

Dim Dateityp$

Dim wksAuslesung As Worksheet

On Error Resume Next
Application.DisplayAlerts = False
Sheets("Auslesung").Delete
On Error GoTo 0
Application.DisplayAlerts = True

Set wksAuslesung = Sheets.Add

With wksAuslesung
.Name = "Auslesung"

Dateityp = Dir(strPath & "*.ASC")
Do While Dateityp <> ""
If Right(Dateityp, 3) = "ASC" Then

intWert = 0
strExportfile = strPath & Dateityp
intDateinummer = FreeFile

Open strExportfile For Input As #1
Do While Not EOF(1)
Line Input #intDateinummer, strZeile
strWert = Split(strZeile, vbTab)
intWert = intWert + 1

If intWert >= intAnzahlAnfang And intWert < intAnzahlEnde + intAnzahlAnfang Then
lngFirstRow = .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

On Error Resume Next
.Cells(lngFirstRow, 1) = CDate(strWert(0))
.Cells(lngFirstRow, 2) = CDbl(strWert(1))
On Error GoTo 0
End If
Loop
Close #1

End If

Dateityp = Dir
Loop
End With

Set wksAuslesung = Nothing
End Sub
In dem Makro musst Du in den 3 Zeilen

Const intAnzahlAnfang As Integer = 8
Const intAnzahlEnde As Integer = 10
Const strPath As String = "H:\Müll\"
die erste einzufügende Zeile (im Beispielmakro die Zeile 8), wieviele Zeilen eingelesen werden sollen (im Beispielmakro 10 Zeilen) und den Pfad, in dem sich die ASC-Dateien befinden, anpassen.

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

Bei Fragen melde Dich.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von
Einfach perfekt !
Das Makro funktioniert einwandfrei und macht keinerlei Probleme.
Vielen Dank. Mit so einer ausführlichen Erklärung und Beschreibung hatte ich eigentlich nicht gerechnet ;)
Auch der Support von deiner HP war sehr hilfreich.

Vielen Dank!
...