Registriert seit: 17.12.2014
Version(en): 365
Hallo schauan,
im Nachhinein betrachtet ist mein nächtlicher Vorschlag, den Konvertierungsvorgang in das Makro einzubauen, vielleicht doch nicht so sinnvoll:
Der Ablauf wäre dadurch gestört, dass zweimal nach Fundstellen gefragt werden müsste, zunächst nach dem Ort, wo die Datei im Ursprungsformat steht, und dann nach dem Ort, an dem sie schließlich abgelegt werden soll.
Wäre es besser, man würde zwei Makros daraus machen, eines, das alle Dateien der Kategorie CSV in einem anderen Ordner konvertiert, und ein zweites, welches im Wesentlichen Deinem Vorschlag entspricht, nur dass die auszulesenden Werte jetzt in anderen Zellen stehen ?
Ich hoffe, Dich nicht über Gebühr zu beanspruchen.
Hardbopper
Registriert seit: 29.09.2015
Version(en): 2030,5
geht doch einwandfrei mit:
Code: Sub M_snb()
sn=split(createobject("wscript.shell").exec("cmd /c Dir C:\Downloads\*.csv /b").stdout.readall,vbcrlf)
redim sp(ubound(sn),1)
with createobject("scripting.filesystemobject")
for j=0 to ubound(sn)-1
st=split(split(.opentextfile("C:\Downloads\" & sn(j)).readall,vbcrlf)(6),";")
sp(j,0)=st(1)
sp(j,1)=st(3)
next
end with
sheets(1).cells(1).resize(ubound(sp),2)=sp
End Sub
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo,
Andrés Code für P7 und R7:
Option Explicit
Sub CSV_EinLesen()
'Variablendeklarationen
'Variant
Dim varFileName, arrLines
'Zeichenkette
Dim strLines$
'Datei waehlen
varFileName = Application.GetOpenFilename("CSV-Dateien,*.csv,Alle Dateien,*.*", , "Datei öffnen")
'Wenn nichts gewaehlt wurde, dann Makro verlassen
If varFileName = False Then Exit Sub
'alle Zeilen als eine Zeichenkette einlesen
strLines = ReadFile(CStr(varFileName))
'Zeilen trennen
arrLines = Split(strLines, Chr(10))
'Daten uebertragen
'mit der letzten ausgefuellten Zelle in Spalte A
With Cells(Rows.Count, 1).End(xlUp)
'darunter Wert aus 2. Spalte eintragen - Trennzeichen ";"
.Offset(1, 0) = Split(arrLines(6), ";")(15)
'darunter daneben Wert aus 4. Spalte eintragen - Trennzeichen ";"
.Offset(1, 1) = Split(arrLines(6), ";")(17)
'Ende mit der letzten ausgefuellten Zelle in Spalte A
End With
End Sub
Private Function ReadFile(ByVal strFileName As String) As String
'Variablendeklarationen
'Integer, String
Dim iFile%, strAll$
'Freie Dateinummer zuweisen
iFile = FreeFile
'Datei binär öffnen
Open strFileName For Binary As #iFile
'Datei komplett einlesen
strAll = Space(LOF(iFile)): Get #iFile, , strAll
'Datei schliessen
Close #iFile
'Zeichenkette zurueckgeben
ReadFile = strAll
End Function
Code eingefügt mit: Excel Code Jeanie
Sollte das wieder nicht gehen, solltest Du eine solche CSV-Datei posten, damit man es auch richtig testen kann.
Gruß Uwe
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
11.10.2015, 13:51
(Dieser Beitrag wurde zuletzt bearbeitet: 11.10.2015, 13:52 von schauan.)
Halllöchen,
um auf die Fehler schauen zu können, bräuchte man, wie auch Uwe schrieb, eine csv zur Analyse. Ich könnte mir z.B. vorstellen, dass ein anderes Trennzeichen für die Spalten und / oder Zeilen verwendet wird oder auch keine 7 Zeilen drin sind.
Extra konvertieren und dann übernehmen ist nicht notwendig.
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo André,
Du hattest die Zeile 8 abgefragt, die es wohl nicht gab.
Gruß Uwe
Registriert seit: 17.12.2014
Version(en): 365
Hallo an alle,
nachdem meine Erläuterungen offensichtlich etwas unverständlich werden, habe ich mich entschlossen, aus Datenschutzgründen auf das Nötige gekürzte Dateien hier einzustellen.
Im Verzeichnis Downloads landen Dateien etwa folgenden Aussehens:
[attachment=3012]
Da dem Vernehmen nach Dateien des CSV-Formats nicht unmittelbar ausgewertet werden können, sondern in ein "echtes" XL-Format konvertiert werden müssen, habe ich dies mit folgendem Ergebnis getan:
Test konvertierte csv-Datei.csv (Größe: 1,01 KB / Downloads: 2)
Wie man sieht, sind die in der CSV-Datei auf A7:E7 verteilten Einträge durch die Konvertierung in A7 zusammengefasst. Sie werden zwar in diesem Beispiel in G7:K7 wieder aufgeteilt, die Adresse scheint mir aber insoweit etwas unzuverlässig, weil ich bei einem anderen Versuch diese Einzelwerte in anderen Zellen wiedergefunden habe (warum, kann ich auch nicht erklären), soll heißen: Es wäre sicherer. die ganze Zeile 7 auszulesen, dann könnte ich das Auswerten selbst steuern.
Meine neu formulierte Bitte geht also dahin:
1. (Unterstellt,, die unmittelbare Auswertung von CSV-Dateien ist nicht möglich) ein Makro zu erstellen, welches alle CSV-Dateien im Verzeichnis Downloads en bloc in XL-Dateien konvertiert .
2. mit einem zweiten Makro aus einzelnen Dateien die gesamte Zeile 7 auszulesen.
Wenn noch weitere Erläuterungen nötig sind, bitte ich um Nachricht.
Hardbopper
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen hardbopper,
ja, der Uwe hat recht. Du musst in meinem Code aus den beiden (7) zwei mal (6) machen. Das Ergebnis sieht dann mit Deinen Testdaten bei mir so aus:
Arbeitsblatt mit dem Namen 'Tabelle1' | | A | B | 4 | ""11.10.2015"" | ""100,00"" |
Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg |
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 17.12.2014
Version(en): 365
Hallo schauan,
ja, es funktioniert. Nur noch eine Kleinigkeit: Die ausgelesenen Werte sind in zwei, manchmal auch in vier Anführungszeichen gesetzt. Kann man die noch los werden ?
Gruß Hardbopper
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo,
mal ungetestet
Code: With Cells(Rows.Count, 1).End(xlUp)
'darunter Wert aus 2. Spalte eintragen - Trennzeichen ";"
.Offset(1, 0) = Replace(Split(arrLines(6), ";")(15), Chr(34), "")
'darunter daneben Wert aus 4. Spalte eintragen - Trennzeichen ";"
.Offset(1, 1) = Replace(Split(arrLines(6), ";")(17), Chr(34), "")
'Ende mit der letzten ausgefuellten Zelle in Spalte A
End With
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 17.12.2014
Version(en): 365
Ich dachte dabei an eine Möglichkeit im Makro.
Andernfalls werde ich die Formel =WECHSELN(A1;"""";"") einsetzen.
Jetzt schon einmal herzlichen Dank an alle, die an der Lösung beteiligt waren.
Einen schönen Sonntag noch.
Hardbopper
|