【Excel VBAでテキストファイルの書込みを行う方法】

ExcelVBA

VBAを使用すると、CSVファイルにデータを書き込むことができます。CSVファイルは、カンマで区切られた値を含むテキストファイルです。以下では、VBAを使用して新しいCSVファイルにデータを書き込む方法と、既存のCSVファイルにデータを追記する方法について説明します。

新規書き込みする場合

新しいCSVファイルを作成して、データを書き込む手順は以下のとおりです。

ステップ1: ファイルを作成する

Dim fileNumber As Integer
fileNumber = FreeFile()

Open "C:\example.csv" For Output As fileNumber

FreeFile関数を使用して、ファイル番号を取得します。そして、Openステートメントを使用して、ファイルを作成し、ファイル番号を割り当てます。

ステップ2: データを書き込む

Print #fileNumber, "1,2,3"
Print #fileNumber, "4,5,6"

Printステートメントを使用して、データをファイルに書き込みます。各行の値はカンマで区切られています。この例では、2つの行が書き込まれ、それぞれ3つの値が含まれています。

ステップ3: ファイルを閉じる

Close #fileNumber

Closeステートメントを使用して、ファイルを閉じます。これで、新しいCSVファイルにデータが書き込まれました。

追記する場合

既存のCSVファイルにデータを追記する手順は以下のとおりです。

ステップ1: ファイルを開く

Dim fileNumber As Integer
fileNumber = FreeFile()

Open "C:\example.csv" For Append As fileNumber

FreeFile関数を使用して、ファイル番号を取得します。そして、Openステートメントを使用して、既存のファイルを開き、ファイル番号を割り当てます。For Appendパラメータを使用することで、既存のファイルにデータを追記することができます。

ステップ2: データを書き込む

Print #fileNumber, "7,8,9"
Print #fileNumber, "10,11,12"

Printステートメントを使用して、データをファイルに書き込みます。各行の値はカンマで区切られています。この例では、2つの行が書き込まれ、それぞれ3つの値が含まれています。

ステップ3: ファイルを閉じる

Close #fileNumber

Closeステートメントを使用して、ファイルを閉じます。これで、既存のCSVファイルにデータが追記されました。

実装例

以下の例は、新しいCSVファイルにデータを書き込む方法を示しています。

Sub WriteToCSV()
    Dim fileNumber As Integer
    fileNumber = FreeFile()

    Open "C:\example.csv" For Output As fileNumber
    
    Print #fileNumber, "Name, Age, Gender"
    Print #fileNumber, "John, 25, Male"
    Print #fileNumber, "Sarah, 30, Female"
    
    Close #fileNumber
End Sub

この例では、”Name”、”Age”、”Gender”というヘッダー行と、2つのデータ行が含まれるCSVファイルが作成されます。

以下の例は、既存のCSVファイルにデータを追加する方法を示しています。

Sub AppendToCSV()
    Dim fileNumber As Integer
    fileNumber = FreeFile()

    Open "C:\example.csv" For Append As fileNumber
    
    Print #fileNumber, "Tom, 35, Male"
    Print #fileNumber, "Lisa, 28, Female"
    
    Close #fileNumber
End Sub

この例では、既存のCSVファイルに2つのデータ行が追加されます。

練習問題

以下の練習問題では、新しいCSVファイルを作成し、いくつかのデータを書き込みます。

問題

新しいCSVファイルを作成し、以下のデータを書き込んでください。

NameAgeGender
John25Male
Sarah30Female
Bob40Male
Mary35Female