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
  2. Code Beschreibung.
  3. Zusammenfassung

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.