こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAでテキストファイルを出力する方法を知っていますか?
Excelのデータをテキストで出力したいケースはよくありますよね。
そこで今回は、
・テキストファイルに出力する2つの方法
といった基礎的なことから、
・テキストファイルを出力するサンプルコード
・【補足】マクロ実行ファイルのフォルダのパスを取得する方法
といった応用的な方法まで、徹底的に解説します!
テキストファイルに出力する2つの方法
はじめに、テキストファイルを出力する方法について解説します。
大きく分けて2つの方法があります。
・Open・Print・Closeステートメントを使う方法
・SaveAsメソッドでテキストを指定する方法
それぞれ詳しく解説しますね。
Open・Print・Closeステートメントを使う方法
まずは、Open・Print・Closeステートメントを使う方法について解説します。
Open・Print・Closeステートメントを使えば、以下の流れでテキストファイルを出力することができます。
1. Openステートメントでファイルを開く
2. Printステートメントで値を書き込む
3. Closeステートメントでファイルを閉じる
具体的な使い方は、次のとおりです。
使い方:
Sub Test() 'ファイルを開く Open ファイルパス For Output As #番号 'Printで値を書き込む Print #番号, 書き込む値 '保存して閉じる Close #番号 End Sub
「ファイルを開く→値を書き込む→保存して閉じる」の流れなので、シンプルでわかりやすいですよね。
「Print #番号 , 書き込む値」が1行値を書き込む方法なので、書き込む行数文Printの処理をループすることで、複数行の値を書き込むことができます。
Open・Print・Closeステートメントを使ったファイル出力方法については以下で解説しているので、気になる方は以下を見てみてくださいね!
SaveAsメソッドでテキストを指定する方法
次に、SaveAsメソッドでテキストを指定する方法について解説します。
SaveAsメソッドを使って保存するファイルの形式をテキストに指定することで、以下のようにテキストファイルで保存することができます。
名前を付けてテキストファイルで保存する方法:
Worksheets(保存するシート名).Copy ActiveWorkbook.SaveAs Filename:=保存するファイルパス, _ FileFormat:=xlText
ブックには複数シートがある場合が多いので、上の例ではシート名を指定してテキストファイルで保存するための書き方を解説しています。
「Worksheets(保存するシート名).Copy」でシートを新しいブックにコピーして、ActiveWorkbook.SaveAsで名前を付けて保存するときに「FileFormat:=xlText」でテキスト形式を指定しています。
このように、簡単にテキストファイルで保存することができます。
ちなみに、SaveAsメソッドの使い方については以下で解説しているので、気になる方は見てみてくださいね!
サンプルコード
次に、サンプルコードを使って、具体的な使い方を解説します。
サンプルコードも2つの方法でそれぞれ解説しますね。
Open・Print・Closeステートメントを使う方法
まずは、Open・Print・Closeステートメントを使うサンプルについてです。
セルのデータ:
サンプルコード:
Sub Test_Open() Dim strFilePath As String strFilePath = "C:UsersSiroDesktopVBATest_Open.txt" 'ファイルパス 'ファイルオープン(ない場合は新規作成) Open strFilePath For Output As #1 '値を書き込む Dim i As Integer For i = 1 To 6 Print #1, Cells(i, 1) & "," & Cells(i, 2) Next i '保存して閉じる Close #1 MsgBox "ファイルの作成が完了しました", vbInformation End Sub
実行後作成されたテキストファイルのデータ:
No,Name 1,侍エンジニア1 2,侍エンジニア2 3,侍エンジニア3 4,侍エンジニア4 5,侍エンジニア5
「Cells(i, 1)」でNoのデータ、「Cells(i, 2)」でNameのデータをエクセルから取得し、ファイルに書き込んで保存するサンプルです。
このように、簡単にテキストファイルを保存することができます。
SaveAsメソッドでテキストを指定する方法
つぎは、SaveAsメソッドでテキストを指定するサンプルについてです。
セルのデータ:
サンプルコード:
Sub Test_SaveAs() Dim strFilePath As String strFilePath = "C:UsersSiroDesktopVBATest_SaveAs.txt" 'ファイルパス '別名でテキストファイルを保存 Worksheets("Sheet1").Copy ActiveWorkbook.SaveAs Filename:=strFilePath, _ FileFormat:=xlText '作成したファイルを閉じる ActiveWorkbook.Close End Sub
実行後のファイル結果:
No Name 1 侍エンジニア1 2 侍エンジニア2 3 侍エンジニア3 4 侍エンジニア4 5 侍エンジニア5
「Worksheets("Sheet1").Copy」でSheet1のデータを新しいブックにコピーした後、SaveAsメソッドで名前を付けてテキストファイルを保存し、Closeメソッドでファイルを閉じています。
このように、簡単にテキストファイルを保存することができます。
【補足】マクロ実行フォルダのパスを取得する方法とは
ここまでテキストファイルを作成する方法について解説してきましたが、ファイルの保存先を指定するときに、「マクロ実行ファイルと同じフォルダに保存したい」というケースもありますよね。
「ThisWorkBook.Path」を使うと、マクロ実行ファイルのパスを取得できるので覚えておくと便利です!
ThisWorkBook.Pathに置き換えたサンプルコード:
Sub Test_SaveAs() Dim strFilePath As String strFilePath = ThisWorkbook.Path & "Test_SaveAs.txt" 'ファイルパス '別名でテキストファイルを保存 Worksheets("Sheet1").Copy ActiveWorkbook.SaveAs Filename:=strFilePath, _ FileFormat:=xlText '作成したファイルを閉じる ActiveWorkbook.Close End Sub
実行後のファイル結果:
No Name 1 侍エンジニア1 2 侍エンジニア2 3 侍エンジニア3 4 侍エンジニア4 5 侍エンジニア5
直接パスを指定する場合と比べてタイプミスなども減るので、マクロ実行ファイルのパスを取得する方法を覚えておくと便利です。
ちなみに、ブックの操作に関しては以下でも詳しく解説しているので、気になる方は見てみてくださいね!
まとめ
今回は、VBAでテキストファイルを出力する方法を解説しました。
データをテキストファイルに出力して使うケースはよくあります。
使い方も簡単なので、ぜひ使ってみてくださいね!