Supportnet Computer
Planet of Tech

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:


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