CSV- und Textdateien sicher mit Excel VBA bearbeiten
Datum der Veröffentlichung:
Aktualisiert:
Fachartikel > CSV- und Textdateien sicher mit Excel VBA bearbeiten
Status 2026 und sichere Verwendung
Schlussfolgerung: Behandeln Sie eine reine Textdatei nur dann als Zeilen, wenn ihr Format tatsächlich zeilenorientiert ist. Ein CSV-Feld kann Kommas, Anführungszeichen und Zeilenumbrüche enthalten. Verwenden Sie daher einen CSV-fähigen Parser für allgemeine CSV-Daten und schreiben Sie in eine temporäre Datei, bevor Sie das Original ersetzen.
Was Sie lernen werden
- Wie sich die Datei-E/A-Modi von VBA für Eingabe, Anhängen und Ausgabe unterscheiden.
- Wie sich Kodierung, Zeilenumbruchstil, Dateisperre und Fehlerbeseitigung auf ein Umschreiben auswirken.
- Warum die einfache Aufteilung von Zeichenfolgen für beliebige CSV-Datensätze im RFC-Stil unsicher ist.
Für wen ist dies gedacht: Excel-Benutzer, die kleine, kontrollierte Textverarbeitungsmakros verwalten.
Stand 2026: Das ursprüngliche Makro demonstriert einen spezifischen lokalen Workflow und wurde nicht in eine verlustfreie CSV-Bibliothek verallgemeinert. Sichern Sie repräsentative Dateien, testen Sie zitierte und mehrzeilige Werte und führen Sie kein Umschreiben für die einzige Produktionskopie durch.
Sicherheitshinweis: Die Befehle und Konfigurationsbeispiele im Originalartikel wurden nicht in einer aktuellen Produktionsumgebung erneut ausgeführt. Überprüfen Sie unterstützte Versionen, Backups, Zugriffskontrollen und Rollback-Schritte in einer separaten Testumgebung, bevor Sie sie anwenden.
Offizielle Primärquellen
Überblick
Dieser Artikel zeigt die Bearbeitung von CSV- und Textdateien mit VBA und behandelt folgende Aufgaben:
- Zeilen oder Text innerhalb einer vorhandenen CSV- oder Textdatei einfügen.
- Zeilen aus einer vorhandenen CSV- oder Textdatei löschen.
Inhaltsübersicht
1. Programmiermethode
Zusammenfassend lässt sich sagen, dass FileSystemObject nicht in der Lage ist, in der Mitte einer Zeile anzuhängen oder eine bestimmte Zeile zu löschen, so dass Sie dies selbst programmieren müssen.
Nachstehend finden Sie Beispiele für die Programmierung.
Da es in Function erstellt wird, hoffe ich, dass Sie es durch Kopieren und Einfügen einfügen und die Methode von Sub aufrufen können.
'Parameter Examples
'## filePath C:\Users\user\Desktop\test\test.txt
'## mode false:delete, true:write
'## targetRow 10
'## targetInput If in write mode, any character
'## lineBreakType false:vbLf, true:vbCrLf
Function editFile(filePath As String, mode As Boolean, targetRow As Long, targetInput As String, lineBreakType As Boolean)
'File existence check
If Dir(filePath) = "" Then
MsgBox "File does not exist!"
Exit Function
End If
Dim tempText As String
Dim tempTextBefore As String
Dim tempTextNew As String
Dim tempTextAfter As String
Dim resultText As String
Dim i As Long
'File read
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.LoadFromFile filePath
tempText = .ReadText
.Close
End With
Dim tempTextBeforeRow As Long
tempTextBeforeRow = 0
For i = 1 To targetRow - 1
If lineBreakType Then
tempTextBeforeRow = InStr(tempTextBeforeRow + 1, tempText, vbCrLf)
Else
tempTextBeforeRow = InStr(tempTextBeforeRow + 1, tempText, vbLf)
End If
Next i
If lineBreakType Then
tempTextBeforeRow = tempTextBeforeRow + 1
End If
tempTextBefore = Left(tempText, tempTextBeforeRow)
'write
If mode Then
tempTextAfter = Mid(tempText, tempTextBeforeRow + 1, Len(tempText))
If lineBreakType Then
tempTextNew = targetInput & vbCrLf
Else
tempTextNew = targetInput & vbLf
End If
resultText = tempTextBefore & tempTextNew & tempTextAfter
'delete
Else
Dim tempTextAfterRow As Long
tempTextAfterRow = 0
For i = 1 To CInt(targetRow)
If lineBreakType Then
tempTextAfterRow = InStr(tempTextAfterRow + 1, tempText, vbCrLf)
Else
tempTextAfterRow = InStr(tempTextAfterRow + 1, tempText, vbLf)
End If
Next i
If lineBreakType Then
tempTextAfterRow = tempTextAfterRow + 1
End If
tempTextAfter = Mid(tempText, tempTextAfterRow + 1, Len(tempText))
resultText = tempTextBefore & tempTextAfter
End If
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
If lineBreakType Then
.LineSeparator = -1
Else
.LineSeparator = 10
End If
.Open
.WriteText tempTextBefore & tempTextNew & tempTextAfter, 0
.SaveToFile filePath, 2
.Close
End With
End Function
Um es zu verwenden, geben Sie die folgenden Argumente an.
- filePath: Dies ist der vollständige Pfad der Datei. Beispiel.)C:\Users\user\Desktop\test\test.txt
- mode: Pass true, false. Wenn True, hinzufügen. Wenn false, wird die Zeile gelöscht.
- targetRow: Gibt die Anzahl der Zielzeilen an. Bei Hinzufügungen handelt es sich um die Anzahl der hinzuzufügenden Zeilen, bei Löschungen um die Anzahl der zu löschenden Zeilen.
- targetInput: Bei Postskripten geben Sie den Wert an, der angehängt werden soll. Er wird nicht für die Löschung verwendet und kann ein beliebiger Wert sein. Auch leere Buchstaben sind zulässig.
- lineBreakType: Setzen von Zeilenumbruchzeichen. Wenn True, vbCrLf. vbLf if False. Kurz gesagt: Wahr für Dateien, die in Windows erstellt wurden.
Die Zeichenkodierung ist UTF-8, aber wenn Sie sie ändern wollen, müssen Sie den Funktionscode direkt ändern. Es gibt zwei Stellen, an denen ".Charset = "UTF-8"" steht.
Ein Beispiel für die Implementierung eines aktuellen Funktionsaufrufs ist unten dargestellt.
Sub test()
'Beispiel für das Anhängen von test123 an Zeile 5 von test.txt.(In Windows erstellte Dateien.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
'Beispiel für das Löschen der Zeile 5 von test.txt.(In Windows erstellte Dateien.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
End Sub
Wenn Sie als csv-Datei anhängen möchten, geben Sie als Argument für den anzuhängenden Wert einen durch Komma getrennten Wert an, und es wird ein durch Komma getrennter Wert angehängt. Beispiel.)"test1,test2,test3"
2. Code Beschreibung.
Dies ist das Ende der Anleitung zur Verwendung des Systems, gefolgt von einer Erklärung des Codes.
Die Einzelheiten sind im Code zu finden, aber ein grober Ablauf sieht wie folgt aus.
Für das Postskriptum.
- ①Lesen von Textdateien in den als Argumente übergebenen Pfaden.
- ②Die Anzahl der Zeichen bis zur Anzahl der im Argument übergebenen Zeilen wird durch die Anzahl der Zeilenumbrüche bestimmt. In Zeile 5 gibt es beispielsweise vier Zeilenumbrüche vor Zeile 5, also suchen Sie die Position, an der sich der vierte Zeilenumbruch befindet
- ③Abrufen von Informationen bis zu Zeile 4.
- ④(2) Erfassen Sie die Informationen ab Zeile 5 auf die gleiche Weise wie unter (2).
- ⑤Die Informationen in (3), die als Argument übergebenen anzufügenden Informationen und die Informationen in (4) werden miteinander kombiniert.
- ⑥Erstellen Sie eine Datei auf der Grundlage der Informationen in (5) und überschreiben Sie die Datei.
Im Falle der Löschung
- ①Lesen von Textdateien in den als Argumente übergebenen Pfaden.
- ②Die Anzahl der Zeichen bis zur Anzahl der im Argument übergebenen Zeilen wird durch die Anzahl der Zeilenumbrüche bestimmt. In Zeile 5 gibt es beispielsweise vier Zeilenumbrüche vor Zeile 5, also suchen Sie die Position, an der sich der vierte Zeilenumbruch befindet
- ③Abrufen von Informationen bis zu Zeile 4.
- ④(2) Erfassen Sie die Informationen ab Zeile 6 auf die gleiche Weise wie unter (2).
- ⑤Die Informationen in (iii) und (iv) werden miteinander kombiniert. (Erstellen Sie eine Zeichenkette ohne fünfte Zeile.)
- ⑥Erstellen Sie eine Datei auf der Grundlage der Informationen in (5) und überschreiben Sie die Datei.
Im Falle des Anhängens und Löschens ist beides dasselbe, aber anstatt die Datei zu bearbeiten, werden nur die notwendigen Informationen aus der Originaldatei extrahiert und eine neue Datei erstellt und gespeichert.
3. Zusammenfassung
Wenn Sie Probleme bei der Bearbeitung von csv-/Textdateien mit VBA (Excel-Makros) haben, lesen Sie bitte diesen Abschnitt.