Excel VBA を使用してテキストファイルにデータを書き込む

Glen Alfaro 2022年4月18日
Excel VBA を使用してテキストファイルにデータを書き込む

Excel VBA は、データ処理タスクとクリーンアップを処理する場合によく使用されるソリューションです。さらに、実行に時間がかかる反復タスクを自動化できます。

VBA の重要な機能の 1つは、変更を手動で開いたり、名前を付けたり、保存したりすることなく、テキストファイルを生成および編集できることです。

この記事では、VBA を使用してテキスト (.txt) ファイルを生成する方法を説明します。

この記事では、Excel VBA を使用してテキストファイルを生成しようとしています。コードを深く掘り下げる前に、Excel VBA がファイルとフォルダーを処理する FileSystemObject と対話できるようにする必要があります。

FileSystemObject を有効にする手順:

  • Excel ファイルを開きます。
  • 開発者タブから、Visual Basic エディターを開きます。
  • ツールツールバーから、参照をクリックします。
  • Microsoft Scripting Runtime チェックボックスにチェックマークを付けます。

これですべての設定が完了しました。

以下のコードブロックは、VBA を使用してテキストファイルを作成する方法を示しています。

SaveTextToFile サブルーチンには、fileNamefileContent の 2つのパラメーターが必要です。fileName 変数は、生成されるテキストファイルの目的のファイル名になります。fileContent 変数は、テキストファイルの実際のコンテンツになります。filePath は、出力ファイルの正しい場所に合うように編集する必要があります。

FileSystemObjectfso として宣言して、Intellisense によるオートコンプリートが機能するようにすることをお勧めします。これにより、誤植を回避でき、FileSystemObject ライブラリ内の他のメソッドの検出にも役立ちます。

コードの実行が終了する前に、fso = NothingSet fileStream = Nothing を含めることが重要です。これら 2つを閉じないと、実行時にエラーが発生するためです。

Option Explicit

Public Sub SaveTextToFile(fileName As String, fileContent As String)
    
    Dim filePath, fileAttributes As String
    filePath = "C:\Users\temp\Desktop\Destination"
    fileAttributes = filePath & "\" & fileName & ".txt"
   
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject
    Dim fileStream As TextStream

    Set fileStream = fso.CreateTextFile(fileAttributes)
    fileStream.WriteLine fileContent
    fileStream.Close

    If fso.FileExists(fileAttributes) Then
        Debug.Print "File Created Successfully."
    End If

    Set fileStream = Nothing
    Set fso = Nothing

End Sub

Sub testSub()

Call SaveTextToFile("sample1", "Here is the content.")

End Sub

上記のコードブロックは実際には Excel と相互作用せず、単一のファイルのみを生成しています。

以下のコードブロックは、Excel ファイルのデータに応じてテキストファイルを作成する方法を示しています。サンプル値については、Sheet1 を参照してください。

Sheet1

 |     A       |              B                |          C        |
1| File Name   | Content                       | GenerateTextFile? |
2| sample1     | This is the content of sample1|        Yes        |
2| sample2     | This is the content of sample2|        No         |
2| sample3     | This is the content of sample3|        Yes        |
2| sample4     | This is the content of sample4|        No         |
2| sample5     | This is the content of sample5|        Yes        |
2| sample6     | This is the content of sample6|        No         |

以下の例では、テキストファイルの作成に SaveTextToFile サブルーチンを再利用します。testSub サブルーチンは、Sheet1 のデータに応じてループで SaveTextToFile を呼び出します。

Option Explicit

Public Sub SaveTextToFile(fileName As String, fileContent As String)
    
    
    Dim filePath, fileAttributes As String
    filePath = "C:\Users\temp\Desktop\Destination"
    fileAttributes = filePath & "\" & fileName & ".txt"
   
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject
    Dim fileStream As TextStream

    Set fileStream = fso.CreateTextFile(fileAttributes)

    fileStream.WriteLine fileContent

    fileStream.Close

    If fso.FileExists(fileAttributes) Then
        Debug.Print fileName & " Created Successfully."
    End If

    Set fileStream = Nothing
    Set fso = Nothing

End Sub

Sub testSub()

Dim wb As Workbook
Dim s1 As Worksheet

Set wb = ThisWorkbook
Set s1 = wb.Sheets("Sheet1")

Dim i As Integer

i = 2

Do Until s1.Cells(i, 1) = ""
    
    If s1.Cells(i, 3) = "Yes" Then
    
    Call SaveTextToFile(s1.Cells(i, 1), s1.Cells(i, 2))
    End If
    
i = i + 1

Loop
End Sub

testSub 出力:

sample1 Created Successfully.
sample3 Created Successfully.
sample5 Created Successfully.

Sample1Sample3、および Sample5 は、GenerateTextFile 列に Yes があるために作成されたテキストファイルです。GenerateTextFile 列の No であるため、Sample2Sample4 は作成されません。