Excel 2013: von Funktion eingelesene Daten aus externer CSV im Speicher halten

Mnyut

Grünschnabel
Nach dem jetzt mit der Hilfe von @Yaslaw alles klappt, habe ich ein klein wenig Optimierungspotential:

Ich lese in einer Funktion eine csv-Datei (~6 MB) ein, reinige sie und erhalte zum Schluss ein entsprechendes Array mit dem ich arbeiten kann. Wenn ich das Array wieder in eine Datei schreibe, bleiben noch~200 kB über (~9000 Zeilen, drei Spalten).
Wenn ich das aufbereiten weg lassen und das Array irgend wie im Speicher halten kann, spare ich sicher 500 ms pro Durchlauf ein. Da die Funktion dann später auch gerne 20 .. 100 ... 150 mal pro Tabelleblatt zum Einsatz kommt, ist das eine Menge Zeit (das bisherige, unbefriedigende gebastel aus SVerweis & Co. war noch langsamer).

Gibt es eine derartige Möglichkeit, oder bleibt mir nur der Weg das Array in eine Datei auf die Platte zu schreiben und beim nächsten Durchlauf zu prüfen, ob sich das Original in der Zwischenzeit geändert hat?
Eine Lösung mit SQL Server dazwischen möchte ich nach Möglichkeit vermeiden.
 
Du kannst es in eine Datei schreiben. Ist aber auch langsam. Zudem bedeutet nach Änderungen prüfen, dass du ein neues Array erstellst und das mit dem alten vergleichst. Also noch langsamer.
Wobei ein Array mit 9000 Einträgen ist auch nicht schnell.

Zum speichern: csv

Hast du mal daran gedacht, die geöffnete CSV-Datei mittels SQL abzugreifen?
http://wiki.yaslaw.info/dokuwiki/doku.php/vba/excel/adodbsql

Ggf auch die Filterung des CSV bereits durch SQL machen und nciht zuerst ins Excel importieren
http://stackoverflow.com/questions/11635526/return-csv-file-as-recordset
 
Hätte erst mal nur das Änderungsdatum der Dateien verglichen, falls das mit Excel geht.

An eine Datenbank hatte ich schon gedacht und heute Mittag auch dein Wiki durch geschaut. Bedeutet aber zusätzliche Wartungsaufwand, deshalb hätte ich es gerne vermieden. Die schönste Lösung wäre es natürlich.
 
Keine Datenbank.
Und ja, das Datum kann man schon vergleichen. Ist aber nicht Aussagekräftig. Je nach Programm reicht ein Öffnen und Schliessen der Datei um das Änderungsdatum zu verstellen.

So kannst du das zum Beispiel auslesen
Visual Basic:
  Dim fso As Object
  Dim lastModify As Date
  Set fso = CreateObject("Scripting.FileSystemObject")
  lastModify = fso.GetFile("C:\Temp\MyFile.csv").DateLastModified

Oder falls du eine Referenz auf das 'Microsoft Scripting Runtime" gesetzt hast
Visual Basic:
  Dim fso As New FileSystemObject
  Dim lastModify As Date
  lastModify = fso.GetFile("C:\Temp\MyFile.csv").DateLastModified
 
Zurück