Categories: excel

VBAでCSVファイルの特定フィールドを編集する方法を徹底解説!

ExcelでCSVファイルを扱う機会は多いですが、「CSV内の特定のデータだけを自動で変更したい」というニーズもよくあります。そんなときに役立つのがVBA(Visual Basic for Applications)です。
本記事では、VBAを使ってCSVファイルを読み込み、指定したフィールド(列)の値を編集し、再びCSVとして保存する方法を丁寧に解説します。実務でも応用できるよう、具体的なコード例を交えて紹介しますので、ぜひ参考にしてください。


VBAでCSVファイルを操作する基本の考え方

VBAでCSVを扱うには、以下のようなステップで進めるのが一般的です。

  1. ファイルを開く
  2. 行ごとに読み込む
  3. 区切り文字(カンマなど)でフィールドを分割する
  4. 特定のフィールドを編集する
  5. 編集した内容をファイルに書き込む

CSVはテキストファイルなので、Excelのセル操作ではなく、**ファイル入出力(File I/O)**の処理がメインになります。


CSVファイルを読み込むVBAコードの基本形

まずはCSVファイルを読み込み、1行ずつ配列として取り出す基本コードを紹介します。

Sub ReadCSV()
Dim filePath As String
Dim fileNumber As Integer
Dim line As String
Dim fields() As String

filePath = "C:\sample.csv"
fileNumber = FreeFile

Open filePath For Input As #fileNumber

Do Until EOF(fileNumber)
Line Input #fileNumber, line
fields = Split(line, ",")
' ここでfields(0), fields(1), ...などにアクセス可能
Debug.Print fields(0) ' 1列目のデータを出力
Loop

Close #fileNumber
End Sub

このコードはファイルの中身を読み込むだけですが、次のステップで編集を加える処理を追加します。


特定のフィールドの値を編集する処理を追加する

では、CSVファイル内の「3列目が”Tokyo”である行の5列目を”Updated”に変更する」例を見てみましょう。

Sub EditCSVField()
Dim inputPath As String
Dim outputPath As String
Dim fileIn As Integer, fileOut As Integer
Dim line As String
Dim fields() As String
Dim editedLine As String

inputPath = "C:\input.csv"
outputPath = "C:\output.csv"
fileIn = FreeFile
Open inputPath For Input As #fileIn

fileOut = FreeFile
Open outputPath For Output As #fileOut

Do Until EOF(fileIn)
Line Input #fileIn, line
fields = Split(line, ",")

If UBound(fields) >= 4 Then ' 5列目まで存在するかチェック
If Trim(fields(2)) = "Tokyo" Then
fields(4) = "Updated"
End If
End If

editedLine = Join(fields, ",")
Print #fileOut, editedLine
Loop

Close #fileIn
Close #fileOut

MsgBox "CSV編集完了。出力ファイル:" & outputPath
End Sub

この処理では、指定条件に一致する行の特定列だけを編集しています。元のファイルを壊さないように、新しいファイルに出力しているのもポイントです。


ファイル上書き保存にしたい場合の注意点

出力ファイルを元のファイル名と同じにしてしまえば、実質的に「上書き保存」となります。ただし、途中で処理が止まってしまうとファイルが壊れる恐れがあるため、以下のように一時ファイルを使って安全に上書きする方法がおすすめです。

Name "C:\input.csv" As "C:\input_backup.csv"
Name "C:\output.csv" As "C:\input.csv"

このようにバックアップを取った上で差し替えることで、より安全にCSV編集が行えます。


セル操作と混同しないようにしよう

VBAと聞くと「セルを操作するコード」を思い浮かべる方も多いですが、CSVファイルはExcelのシートではなく「テキストファイル」です。そのため、セルではなく文字列としての行・フィールドを操作する意識が重要です。

特に以下の点に注意しましょう:

  • セルに書き込む Cells(row, col).Value は使いません
  • 書式設定は無視されます(CSVはプレーンなデータのみ)

応用例:複数条件でフィールドを更新する

応用として、「列Aが”John”、かつ列Cが”Osaka”の場合、列Dを”Checked”に更新」するコードは次の通りです。

If fields(0) = "John" And fields(2) = "Osaka" Then
fields(3) = "Checked"
End If

条件を増やす場合は、And, Orを組み合わせれば自由に対応できます。


最後に:VBAでCSV編集はとても実用的

VBAによるCSV編集は、日々の業務で大量のCSVデータを処理する際に非常に便利です。マクロとして保存しておけば、再利用も簡単。今回紹介したコードをベースに、業務に応じた条件や処理内容を追加してカスタマイズしてみてください。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。