Modifier des fichiers CSV et texte sans les altérer avec Excel VBA
Date de publication:
Mise à jour :
INFORMATION > Modifier des fichiers CSV et texte sans les altérer avec Excel VBA
Statut 2026 et utilisation sûre
Conclusion : Traitez un fichier texte brut comme des lignes uniquement lorsque son format est réellement orienté ligne. Un champ CSV peut contenir des virgules, des guillemets et des sauts de ligne. Utilisez donc un analyseur compatible CSV pour les données CSV générales et écrivez dans un fichier temporaire avant de remplacer l'original.
Ce que vous apprendrez
- Comment les modes d'E/S de fichier VBA diffèrent pour l'entrée, l'ajout et la sortie.
- Comment l'encodage, le style de nouvelle ligne, le verrouillage des fichiers et la récupération après erreur affectent une réécriture.
- Pourquoi le simple fractionnement de chaînes n'est pas sécurisé pour les enregistrements CSV arbitraires de style RFC.
À qui s'adresse : les utilisateurs d'Excel qui gèrent de petites macros de traitement de texte contrôlées.
Position 2026 : La macro d'origine démontre un flux de travail local spécifique et n'a pas été généralisée dans une bibliothèque CSV sans perte. Sauvegardez les fichiers représentatifs, testez les valeurs entre guillemets et multilignes, et n'exécutez pas de réécriture sur la seule copie de production.
Note de sécurité : Les commandes et les exemples de configuration de l'article d'origine n'ont pas été réexécutés dans un environnement de production actuel. Vérifiez les versions prises en charge, les sauvegardes, les contrôles d'accès et les étapes de restauration dans un environnement de test distinct avant de les appliquer.
Sources primaires officielles
Vue d'ensemble.
Je voudrais décrire comment éditer des fichiers csv et texte avec VBA (macros Excel). Cet article est destiné aux personnes qui souhaitent programmer les tâches suivantes
- Je veux ajouter des lignes à un fichier csv ou texte déjà existant. Je veux ajouter du texte au milieu d'une ligne.
- Je veux supprimer des lignes dans un fichier csv ou texte déjà existant.
Table des matières
1. Méthode de programmation
En conclusion, FileSystemObject n'a pas la capacité d'ajouter au milieu d'une ligne ou de supprimer une ligne spécifique, vous devez donc le programmer vous-même.
Des exemples de référence de la programmation sont donnés ci-dessous.
Comme elle est créée dans Function, j'espère que vous pouvez l'introduire telle quelle par copier-coller, et appeler la méthode depuis Sub.
'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
Pour l'utiliser, passez les arguments comme suit.
- filePath・・・Il s'agira du chemin complet du fichier. Exemple.)C:\Users\user\Desktop\test\test.txt
- mode・・・Passez vrai, faux. Si c'est vrai, ajoutez. Si elle est fausse, la ligne est supprimée.
- targetRow・・・Spécifie le nombre de lignes cibles. Dans le cas des ajouts, il s'agit du nombre de lignes à ajouter, et dans le cas des suppressions, il s'agit du nombre de lignes à supprimer.
- targetInput・・・Pour les postscripts, indiquez la valeur à ajouter. Il n'est pas utilisé pour la suppression et peut être une valeur arbitraire. Les lettres vides sont également acceptables.
- lineBreakType・・・Définition des caractères de nouvelle ligne. Si c'est vrai, vbCrLf. vbLf si Faux. En bref, True pour les fichiers créés dans Windows.
Le codage des caractères est UTF-8, mais si vous voulez le changer, modifiez directement le code de la fonction. Il y a deux endroits où ".Charset = "UTF-8"".
Un exemple de mise en œuvre d'un appel de fonction réel est présenté ci-dessous.
Sub test()
'Exemple d'ajout de test123 à la ligne 5 de test.txt.(Fichiers créés dans Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
'Exemple de suppression de la ligne 5 de test.txt.(Fichiers créés dans Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
End Sub
Si vous voulez ajouter un fichier csv, faites de l'argument de la valeur à ajouter une valeur séparée par des virgules, et une valeur séparée par des virgules sera ajoutée. Exemple.)"test1,test2,test3"
2. Description du code.
C'est la fin des instructions sur la façon d'utiliser le système, suivie d'une explication du code.
Les détails peuvent être trouvés dans le code, mais un flux de processus approximatif est le suivant.
Pour le post-scriptum.
- ①Lecture des fichiers texte dans les chemins passés en arguments.
- ②Le nombre de caractères jusqu'au nombre de lignes passées en argument est spécifié à partir du nombre de nouvelles lignes. Par exemple, pour la ligne 5, il y a quatre sauts de ligne avant la ligne 5, donc trouvez la position où se trouve le quatrième saut de ligne
- ③Récupérer les informations jusqu'à la ligne 4.
- ④(2) Acquérir les informations à partir de la ligne 5 de la même manière qu'en (2).
- ⑤Les informations de (3), les informations à ajouter passées en argument et les informations de (4) sont combinées ensemble.
- ⑥Créez un fichier basé sur les informations de (5) et écrasez le fichier.
En cas de suppression
- ①Lecture des fichiers texte dans les chemins passés en arguments.
- ②Le nombre de caractères jusqu'au nombre de lignes passées en argument est spécifié à partir du nombre de nouvelles lignes. Par exemple, pour la ligne 5, il y a quatre sauts de ligne avant la ligne 5, donc trouvez la position où se trouve le quatrième saut de ligne
- ③Récupérer les informations jusqu'à la ligne 4.
- ④(2) Acquérir les informations à partir de la ligne 6 de la même manière qu'en (2).
- ⑤Les informations des points (iii) et (iv) sont combinées ensemble. (Créez une chaîne sans cinquième ligne.)
- ⑥Créez un fichier basé sur les informations de (5) et écrasez le fichier.
Dans le cas de l'ajout et de la suppression, il s'agit de la même chose, mais au lieu de modifier le fichier, on fait comme si seules les informations nécessaires étaient extraites du fichier d'origine et qu'un nouveau fichier était créé et enregistré par-dessus.
3. résumé
Si vous rencontrez des problèmes pour modifier des fichiers csv/texte avec VBA (macros Excel), veuillez vous reporter à cette section.
Merci d'avoir regardé jusqu'à la fin.
■INFORMATION
Veuillez cliquer ici pour accéder à la page d'accueil d'INFORMATION.
■PROFILE
Veuillez cliquer ici pour un profil.
■Coordonnées de contact.
Pour toute question concernant cet article, veuillez nous contacter ici.