Wie kann ich aus einem Tabellenbereich eine Textdatei erstellen und diese Textdatei wieder in Excel einlesen?
In Spalte A wird solange gesucht, bis eine leere Zelle gefunden wird. Natürlich wäre auch eine For-Schleife mit Application.Cells(Rows.Count, 1).End(xlUp).Row möglich.
Die Daten aus A, B und C werden mit einem Semikolon als Trennzeichen in eine Textdatei eingelesen.
Einlesen in eine Textdatei mit immer gleichem Pfad:
Sub AlsTextSpeichern()
Dim intI As Integer, lngDNr As LongPtr
lngDNr = FreeFile
'Pfad anpassen
Open "C:\Eigene Dateien\aus Tabelle.txt" For Output As #lngDNr
intI = 2 'erste Zeile mit Angaben
Do While Cells(intI, 1).Value <> "" 'Schleife, solange die Zelle nicht leer ist
'Ã?bernehmen der Daten in die Textdatei
Print #lngDNr, Cells(intI, 1) & ";" & Cells(intI, 2) & ";" & Cells(intI, 3)
intI = intI + 1
Loop
Close #lngDNr
End Sub
Einlesen in eine Textdatei mit wählbarem Pfad:
Sub AlsTextSpeichern1()
Dim intI As Integer, lngDNr As LongPtr
Dim varPfad
varPfad = Application.GetSaveAsFilename(InitialFileName:="Test", fileFilter:="Textdateien (*.txt), *.txt")
If varPfad = False Then Exit Sub
lngDNr = FreeFile
Open varPfad For Output As #lngDNr
intI = 2
Do While Cells(intI, 1).Value <> ""
Print #lngDNr, Cells(intI, 1) & ";" & Cells(intI, 2) & ";" & Cells(intI, 3)
intI = intI + 1
Loop
Close #lngDNr
End Sub
Textdatei in Exceldatei einlesen, immer gleicher Pfad:
Da das Semikolon als Trennzeichen verwendet wurde, brauchen wir die Textdatei als solche nicht aus- und in Excel einzulesen, sondern wir können die Datei direkt öffnen:
Sub AusTextAufrufen()
On Error Resume Next 'falls Datei nicht existiert
'hier nur den Pfad ändern
Workbooks.OpenText Filename:="C:\Eigene Dateien\aus Tabelle.txt", DataType:=xlDelimited, semicolon:=True
End Sub
Textdatei in Exceldatei einlesen, wählbarer Pfad:
Sub AusTextAufrufen1()
Dim varPfad
varPfad = Application.GetOpenFilename(fileFilter:="Textdateien (*.txt), *.txt")
If varPfad = False Then Exit Sub
Workbooks.OpenText Filename:=varPfad, DataType:=xlDelimited, semicolon:=True
End Sub
Gibt es andere Trennzeichen, erfolgt das Aufteilen auf die Zellen natürlich nicht unbedingt. Dann kann entweder mit Split() gearbeitet werden oder es kann mit der integrierten Methode Text in Spalten aufgeteilt werden.
Dynamische Arrayformel mit Matrixfunktion
Möglich ist natürlich auch ab Excel 365, die Textdatei mittels benutzerdefinierter Matrixfunktion auszulesen und die Ergebnisse als Array zu übergeben:
Function DateiEinlesen(strDatei, strTrenner, intSpalten)
Dim intS As Integer, lngZ As LongPtr
Dim lngDNr As Long, strZeile As String, arrTemp
Dim arrS()
lngDNr = FreeFile
lngZ = 0
Open strDatei For Input As #lngDNr
Do While Not EOF(lngDNr)
Line Input #lngDNr, strZeile
If strZeile <> "" Then
arrTemp = Split(strZeile, strTrenner)
lngZ = lngZ + 1
ReDim Preserve arrS(1 To intSpalten, 1 To lngZ)
For intS = 1 To intSpalten
If UBound(arrTemp) >= intS Then
arrS(intS, lngZ) = arrTemp(intS)
Else
arrS(intS, lngZ) = ""
End If
Next
End If
Loop
Close #lngDNr
DateiEinlesen = Application.WorksheetFunction.Transpose(arrS)
End Function
In die Zelle kommt dann nur noch die Formel:
=DateiEinlesen(Pfad zur Datei;Trennzeichen;Anzahl der Spalten)
=DateiEinlesen(A1;";";4)
Allerdings sollten die Dateien natürlich nicht zu gro� sein, weil die Berechnung dieser Formel sonst alles verzögern würde.