Supportnet / Forum / Datenbanken
Import mit gleichzeitiger Berechnung (VBA)
Frage
Hallo.
Ich möchte gerne eine recht große Datei in eine Access-Tabelle importieren. Problem: Die Textdatei hat ca. 580 Spalten (und ein paar tausend Zeilen). Dabei handelt es sich um Messwerte die einen best. Messwert in 5-Minuten-Intervallen auflistet(mit Semikolon getrennt). Ich habe nun versucht, eine simple Importroutine zu schreiben, die jeweils drei dieser Werte zu einem Viertelstunden-Wert addiert.
Im Worten:
suche den ersten Wert und merke ihn dir;
suche den zweiten Wert und merke ihn dir;
suche den dritten Wert und merke ihn dir;
bilde die Summe aus allen dreien und schreibe sie in das erste Feld der Tabelle;
suche den vierten Wert und merke ihn dir;
...
Hier mein bisheriger Ansatz (läuft noch nicht ganz rund :)):
Sub importmitsumme()
Dim importdatei As String
Dim importtext As String
Dim zeile As Integer
Dim spalte As Integer
Dim wert1 As Long
Dim wert2 As Long
Dim wert3 As Long
Dim summe As Long
Dim i As Integer
i = 0
zeile = 2
spalte = 1
importdatei = Range("a1").Value
Open importdatei For Input As #1
Do Until EOF(1)
Line Input #1, importdatei
For i = 1 To 3
cells(zeile, spalte).Value = Left(importtext, InStr(importtext, ";") - 1)
importtext = Right(importtext, Len(importtext) - InStr(importtext, ";"))
spalte = spalte + 1
Next i
Do While InStr(importtext, ";")
wert1 = Left(importtext, InStr(importtext, ";") - 1)
importtext = Right(importtext, Len(importtext) - InStr(importtext, ";"))
wert2 = Left(importtext, InStr(importtext, ";") - 1)
importtext = Right(importtext, Len(importtext) - InStr(importtext, ";"))
wert3 = Left(importtext, InStr(importtext, ";") - 1)
importtext = Right(importtext, Len(importtext) - InStr(importtext, ";"))
summe = wert1 + wert2 + wert3
rangerangerange(zeile, spalte).Value = summe
wert1 = 0
wert2 = 0
wert3 = 0
summe = 0
spalte = spalte + 1
Loop
Cells(zeile, spalte).Value = importtext
zeile = zeile + 1
spalte = 1
Loop
Close
End Sub
Insbesondere habe ich noch ein Problem damit, die mit InStr ausgelesenen strings in integers o.ä. umzuwandeln, um daraus eien summe ziehen zu können.
Viele Grüße,
19kai74
Antwort 1 von ElBobbele
Hallo 19kai74!
Den Auslesevorgang kannst du kräftig straffen und dabei auf InStr() verzichten. Das folgende Beispiel sollte evtl. als Grundlage dienen, auf dem du aufbauen kannst:
Gruss
El Bobbele
Den Auslesevorgang kannst du kräftig straffen und dabei auf InStr() verzichten. Das folgende Beispiel sollte evtl. als Grundlage dienen, auf dem du aufbauen kannst:
Public Sub TestSummenbildung()
Dim str As String
Dim arr() As String
Dim i As Long
Dim lngMax As Long
Dim lngValue As Long
'Testzeichenfolge
str = "1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16"
'Zeichenfolge in Array umwandeln, Semikolon ist Trennzeichen
arr = Split(str, ";")
'Größe des Arrays ermitteln
lngMax = UBound(arr)
'Alle Werte des Arrays durchlaufen
For i = 0 To lngMax
'Werte in Long umwandeln und addieren
lngValue = lngValue + CLng(arr(i))
'Wenn Array-Position durch 3 teilbar ist
'oder das Ende erreicht wurde...
If (i + 1) Mod 3 = 0 Or i = lngMax Then
'... Summe ausgeben und Variable zurücksetzen
'(Ausgabe im Direktfenster: Strg+G)
Debug.Print lngValue
lngValue = 0
End If
Next
End Sub
Gruss
El Bobbele

