Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
416to420
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
416to420
416to420
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

maximale Zeilenzahl

maximale Zeilenzahl
Diana
Hallo!
Ich habe einen Datensatz als dat-file und möchte diesen in excel einlesen. Escel liest aber 'nur' 65536 Zeilen ein. Der Datensatz umfasst deutlich mehr Zeilen. Ist es möglich diesen Umfang zu erweitern?
Als andere Lösung könnte ich mir vorstellen nur bestimmte Daten einzulesen. Der Datensatz beinhaltet 2-Minuten-Messwerte für den Zeitraum vom 01.10.2003 - 16.02.2004.
Das Format ist wie folgt:
(ab Zeile 9 beginnen die Daten)
01.10.03 00:01 9,0
01.10.03 00:03 9,0
01.10.03 00:05 9,0
01.10.03 00:07 9,0
01.10.03 00:09 9,1
...
In Zeile 6 ab Zeichen 10 steht die Einheit (max. 7 Zeichen)
Gibt es da eine Möglichkeit zum Beispiel nur die Datenzeilen vom November 2003 einzulesen. Oder vom 14.11.-11.12.2003?
Vielen Dank für Eure Hilfe
LG Diana
AW: maximale Zeilenzahl
ChrisL
Hi Diana
Ginge vermutlich schon, aber man müsste es erstmal programmieren und dazu müsste man das genaue Dateiformat der Dat-Datei kennen.
Viel einfacher wäre aber, wenn du gleich Access verwenden würdest. Access (Datenbank-Anwendung) kennt im Gegensatz zu Excel (Tabellenkalkulation) keine solche Beschränkung.
Gruss
Chris
AW: Modul
Uwe
Wie ChrisL schon schieb, Diana,
es ist mit Programmieraufwand verbunden, insbesondere wenn man eine Benutzerfreundliche Eingabe ermöglichen möchte, die u.a. auch Plausibilitätsabfragen der Eingabe beinhaltet.
Daher hier nur eine Idee eines Grundkonzepts für eine Modul-SUB, das noch nicht in allen Richtungen ausgetestet sein kann, da mir entsprechende Datensätze nicht zum Testen vorliegen:
Option Explicit
Type Record
Datum As Date
Zeit As Date
Wert As Double
End Type
Sub ReadData()
Dim DateiName As String
Dim r As Long, rHeader As Integer 'Zeilenzähler in der Datei
Dim c As Integer, cmax As Integer 'Spaltenzähler in der Datei
Dim tr As Long ' Zeilenzähler auf dem Arbeitsblatt
Dim d1 As Date, d2 As Date ' Start/Enddatum wird über InputBox abgefragt
Dim intxt As String 'eingelesene Textzeile aus der Datei
Dim pos1 As Integer, temp As String 'Gebrauchswerte beim analysieren des Textzeile
Dim rec As Record 'benutzer definierer Datentyp (siehe oben)
DateiName = Application.GetOpenFilename("Daten (*.dat), *.dat")
If DateiName = "False" Then
MsgBox "Datei " & DateiName & " kann nicht geöffnet werden"
End If
Open DateiName For Input As #1
d1 = CDate(InputBox("Startdatum"))
d2 = CDate(InputBox("Enddatum"))
cmax = 3 'maximale Spaltenzah in der Datei
c = 0
rHeader = 8 'Anzahl der Kopfzeilen in der Datei
r = 0
tr = 0 ' Offset für die Ausgabezeilen in dem Arbeitsblatt
While Not (EOF(1)) And d2 + 1 > rec.Datum
Line Input #1, intxt
r = r + 1
If r > rHeader Then
c = 0
While Len(intxt) > 0
c = c + 1
intxt = Replace(intxt, ",", ".")
pos1 = InStr(intxt, " ")
If (pos1 &gt 0 And c <= cmax) Or c = cmax Then
If pos1 > 0 Then
temp = Left(intxt, pos1 - 1)
Else
temp = intxt
End If
Select Case c
Case 1: rec.Datum = CDate(temp)
Case 2: rec.Zeit = CDate(temp)
Case 3: rec.Wert = Val(temp)
End Select
If pos1 > 0 Then
intxt = Mid(intxt, pos1 + 1)
Else
intxt = ""
End If
End If
Wend
If rec.Datum &gt= d1 And rec.Datum < d2 + 1 Then
tr = tr + 1
Cells(tr, 1) = rec.Datum
Cells(tr, 2) = rec.Zeit
Cells(tr, 3) = rec.Wert
End If
End If
Wend
Close #1
End Sub


Ich hoffe, dass dies nach Deinen Wünschen abänder- und erweiterbar ist.
Gruß!
ennoch,
Anzeige
AW: Modul
Diana
Hallo ennoch,
vielen Dank für das Makro. Das sieht nach sehr viel Arbeit aus. Ich habe es einmal in eine Arbeitsmappe eingebunden und bis zu der Zeile
c = c + 1
läuft es auch durch, aber dann stockt es. Kannst Du mir eventuell sagen, woran das liegt?
Vielen Dank
Diana
Vermutlich ist Wertetrennzeichen kein Leerzeichen
Uwe
Hallo, Diana!
Leider kann ich nur raten, warum das Programmteil nach der Anweisung c=c+1 stockt. Ich benutze die selbe EXCEL-Version, wie Du sie angegeben hast.
Vielleicht ist es sinnvoll, einen Auszug einer DAT-Datei hier hochzuladen, denn ich bin bei der Programmierung von der Datenstruktur ausgegangen, wie Du sie mit den Beispieldaten vorgestellt hast.
Die Anweisung Replace ersetzt das Dezimalszeichen, das Du als Komma angegeben hast, in einen Punkt (vermute jedoch, das in der DAT-Datei ein Punkt verwendet wird oder sollen dies kar zwei Zehlenwerte, z.B. 9 und 1 sein?)
Danach wird die Zeichenkette nach der Position des Trennsymbols zwischen den Einzeldaten einer Zeile durchsucht. Du hast ein Leerzeichen dafür angegeben.
Sollte dies Trennsymbol jedoch ein anderes Zeichen sein, so ist dieses andere Zeichen in der Anweisung pos1 = InStr(intxt, ";") zwischen den doppelten Hochzeichen einzufügen (im Beispiel habe ich das Semikolon gewählt.
Ist dieses Werte-Trennzeichen jedoch ein Komma, so wird das Dezimalzeichen in jedem Fall ein Punkt sein, so dass die Zeile mit der Replace-Anweisung zu entfernen ist.
Gruß,
Uwe
Anzeige
AW: Vermutlich ist Wertetrennzeichen kein Leerzeichen
Diana
Eine Beispiel-Datei liegt unter folgendem Link ... aber nur, wenn Du Zeit hast, und es nicht zu viel Arbeit macht.
https://www.herber.de/bbs/user/5717.dat
LG Diana
AW: Vermutlich ist Wertetrennzeichen kein Leerzeichen
Uwe
Hallo, Diana!
Der Großteil des Programmstückchen ist in Ordnung für den Datensatz, so wie er Dir vorliegt. Einzig der Wert in einem Record wird über ein TAB von den Zeitspalten getrennt, was dazuführte, dass das führende Leerzeichen vor einer positiven Zahl als zusätlich Trennzeichen interpretiert wurde.
Um diesen Fall nun auszuschliessen, möchte ich Dich bitten, die drei Programmzeilen in dem IF-Block nach dem SELCT-Block einzufügen.
Hier die Zeilen:
While Left(intxt, 1) = " "
intxt = Mid(intxt, 2)
Wend
... und hier der Kontext
Select Case c
Case 1: rec.Datum = CDate(temp)
Case 2: rec.Zeit = CDate(temp)
Case 3: rec.Wert = Val(temp)
End Select
If pos1 > 0 Then
intxt = Mid(intxt, pos1 + 1)
While Left(intxt, 1) = " "
intxt = Mid(intxt, 2)
Wend
Else
intxt = ""
End If
....


Viel Erfolg!
Trenn
Anzeige
AW: Vermutlich ist Wertetrennzeichen kein Leerzeichen
Diana
Hallo Uwe!
Vielen Dank! Das ist genau richtig ... ich kann zwar nicht den ganzen Datensatz einlesen, aber nun kann ich ihn nach Zeitpunkten einlesen ... das ist viel viel besser ... alle Daten braucht man meistens eh nicht in einem Excel-Blatt.
Liebe Grüße
Diana
AW: Erste Plausibilitätsprüfung für Enddatum
Uwe
Schön, Diana,
dass es wohl ohne Probleme geklappt hat, denn zu spät sah ich, nach meiner ersten Antwort, welchen Kenntnissand Du für VBA-Kentnisse gewählt hattest. Da bin ich denn dann doch froh, dass das Umsetzen s gut geklappt hat, was ntürlich gleich zur nächsten Erweiterung ansporen sollte:
    .
Open DateiName For Input As #1
d1 = CDate(InputBox("Startdatum"))
Dim maxDays As Long
maxDays = 65535 / (24*60)
While d2 < d1
d2 = CDate(InputBox("Enddatum (maximal: " & d1 + maxDays & ")"))
If d2 < d1 Or d2 > d1 + maxDays Then
MsgBox ("Ungültiges Enddatum")
d2 = 0
End If
Wend
cmax = 3 'maximale Spaltenzah in der Datei
.

Die Erweiterung - aus dem bisherigen Listing ist die Änderung, die für die Abfrage nach dem Enddatum ersetzt - wohl zu erkennen. Auf der Grundlage des Startdatums, wird das maximal zulässige Enddatum angegeben, so dass nicht mehr als 65535 Zeilen eingelesen werden.
Ein ähnliche Überprüfung kann aber auch über die Tabellen-Zeilenzähler-Variable tr durchgeführt werden, die, sobald ihr wert größer als 65535 wird, keine neue Zeile in das Tabellenblatt schreibt.
If rec.Datum >= d1 And rec.Datum < d2 + 1 And tr < 65535 Then ...
Nur um meine Neugier zu legen: Könntest Du bitte, wen es möglich und zulässig ist, einen Hinweis geben, in welchen Bereichen man Daten von mehr als 91 Tagen in einem 2 Minutenabstand über je 24 Stunden, in einer Exceltabelle ausgewertet werden?
Übrigens könnte man die Daten aus der DAT-Datei, wenn die Spalte eines Tabellenblatt gefüllt ist, weiter in einer neuen Spalte oder auf einem weiteren Tabellenblatt fortschreiben.
Doch es gibt immer noch mehr Programmierideen, so dass ich hier eine Punkt setzen möchte.
Gruß!
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige