Excel VBA を使用してテキストファイルにデータを書き込む
Excel VBA は、データ処理タスクとクリーンアップを処理する場合によく使用されるソリューションです。さらに、実行に時間がかかる反復タスクを自動化できます。
VBA の重要な機能の 1つは、変更を手動で開いたり、名前を付けたり、保存したりすることなく、テキストファイルを生成および編集できることです。
この記事では、VBA を使用してテキスト (.txt)
ファイルを生成する方法を説明します。
この記事では、Excel VBA を使用してテキストファイルを生成しようとしています。コードを深く掘り下げる前に、Excel VBA がファイルとフォルダーを処理する FileSystemObject
と対話できるようにする必要があります。
FileSystemObject
を有効にする手順:
-
Excel ファイルを開きます。
-
開発者タブ
から、Visual Basic
エディターを開きます。 -
ツール
ツールバーから、参照
をクリックします。 -
Microsoft Scripting Runtime
チェックボックスにチェックマークを付けます。
これですべての設定が完了しました。
以下のコードブロックは、VBA を使用してテキストファイルを作成する方法を示しています。
SaveTextToFile
サブルーチンには、fileName
と fileContent
の 2つのパラメーターが必要です。fileName
変数は、生成されるテキストファイルの目的のファイル名になります。fileContent
変数は、テキストファイルの実際のコンテンツになります。filePath
は、出力ファイルの正しい場所に合うように編集する必要があります。
FileSystemObject
を fso
として宣言して、Intellisense
によるオートコンプリートが機能するようにすることをお勧めします。これにより、誤植を回避でき、FileSystemObject
ライブラリ内の他のメソッドの検出にも役立ちます。
コードの実行が終了する前に、fso = Nothing
と Set 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.
Sample1
、Sample3
、および Sample5
は、GenerateTextFile
列に Yes
があるために作成されたテキストファイルです。GenerateTextFile
列の No
であるため、Sample2
と Sample4
は作成されません。