AW: Frage zu Performance: Welche Lösung ist schneller?
11.04.2010 15:34:32
Martin
Hallo Ramses,
vielen Dank, dass du über meinen Code siehst. Ich habe im (etwas kleinen) Rahmen meiner VBA-Kentnisse mein Bestes gegeben. Bitte schau dir mal an, was du an meinem Makro ändern würdest. Ich habe es ausprobiert und es scheint zu funktionieren.
Option Explicit
Sub UpdateDatenliste()
Dim ImportFile As Variant
Dim FileRow As String, ArrFileRow As Variant
Dim i As Integer
Dim ArrDatenliste As Variant
ImportFile = Application.GetOpenFilename("Aktuelle Datenliste (*.csv; *.txt), *.csv; *.txt," _
, 1, "Importdatei auswählen...")
If ImportFile = False Then Exit Sub
'Bestandsdaten transponiert in Array übertragen
ArrDatenliste = Application.Transpose(Range("Datenliste"))
'Importdatei öffnen
Open ImportFile For Input As #1
While Not EOF(1)
'Zeilenweise Importdatei einlesen
Line Input #1, FileRow
Line Input #1, FileRow
ArrFileRow = Split(FileRow, ";")
'Suche, ob Datensatz bereits enthalten
For i = 1 To UBound(ArrDatenliste, 2)
If ArrDatenliste(1, i) = ArrFileRow(0) And ArrDatenliste(2, i) = ArrFileRow(1) And _
ArrDatenliste(4, i) = ArrFileRow(3) Then
'Datensatz gefunden -> Daten erneuern
ArrDatenliste(3, i) = ArrFileRow(4)
ArrDatenliste(5, i) = ArrFileRow(2)
ArrDatenliste(6, i) = ArrFileRow(8)
ArrDatenliste(7, i) = ArrFileRow(9)
Exit For
End If
If i = UBound(ArrDatenliste, 2) Then
'Datensatz nicht gefunden -> Daten hinzufügen
'Array erweitern
ReDim Preserve ArrDatenliste(1 To UBound(ArrDatenliste, 1), 1 To i + 1)
ArrDatenliste(1, i + 1) = ArrFileRow(0)
ArrDatenliste(2, i + 1) = ArrFileRow(1)
ArrDatenliste(3, i + 1) = ArrFileRow(4)
ArrDatenliste(4, i + 1) = ArrFileRow(3)
ArrDatenliste(5, i + 1) = ArrFileRow(2)
ArrDatenliste(6, i + 1) = ArrFileRow(8)
ArrDatenliste(7, i + 1) = ArrFileRow(9)
Exit For
End If
Next i
Wend
Close #1
With Sheets("Datenliste")
'Array transponiert übertragen
.Cells(2, 2).Resize(UBound(ArrDatenliste, 2), UBound(ArrDatenliste, 1)) = Application. _
Transpose(ArrDatenliste)
'Zellennamen neu zuweisen
.Range(.Cells(2, 2), .Cells(UBound(ArrDatenliste, 2) + 1, 8)).Name = "Datenliste"
'Daten sortieren
.Range("Datenliste").Sort Key1:=.Range("B2"), Key2:=.Range("C2"), Order2:=xlAscending, _
Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
End Sub
Viele Dank für deine Mühe! Ich hoffe, dass meine Gedankengänge nachvollziehbar sind und meine Kommentare ausreichen.
Viele Grüße
Martin