みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAで様々なテキストファイルを作る方法について、何回かのシリーズにてお伝えできればと思います。
テキストファイルって言うとその拡張子はtxtという印象もありますが、csvだってhtmlだってテキストファイルはテキストファイルですよね。
例えばエクセルシートに記載されているデータをもとに、自由自在にそれらのファイル形式で吐き出せたら便利ですよね?
以下記事などではCSVを取り込む方法についてお伝えしていましたが
本シリーズはいわばその逆です。
初回の今回は、エクセルシートの値を拡張子txtのテキストファイルとして出力する方法についてお伝えしたいと思います。
エクセルシートを一行ずつテキストファイルに出力するシンプルなプログラム
例えば以下のような何の変哲もないエクセルシートがあります。
このA列をテキストファイルに書き出すというプログラムを作っていきたいと思います。
プログラムはこちらです。
Sub makeText()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
Dim datFile As String
datFile = ActiveWorkbook.Path & "\data.txt"
Open datFile For Output As #1
Dim i As Long
i = 1
Do While ws.Cells(i, 1).Value <> ""
Print #1, ws.Cells(i, 1).Value
i = i + 1
Loop
Close #1
MsgBox "data.txtに書き出しました"
End Sub
…なんか、けっこう簡単っぽくないですか?
冒頭で紹介した記事のCSVを取り込むプログラムとかなり似ていますので、あわせてご覧いただければと思います。
テキストファイルに一行ずつ出力するプログラムの流れ
上記プログラムですが、全体の流れとしては
- テキストファイルを指定してオープン
- エクセルシートでデータの終わりが来るまで一行ずつ繰り返し
- テキストファイルに現在の行のA列のセルを一行で出力
- テキストファイルをクローズ
という流れになっています。
実行結果
このプログラムを実行しますと、実行したエクセルファイルと同じフォルダに「data.txt」が作成されているはずです。
エディタで開いてみると
このように問題なく出力されていますね。
テキストファイルを操作する命令
ではこのプログラムについて細かく解説をしていきますね。
VBAではテキストファイルを扱うための命令が用意されておりますので、それらを利用しています。
テキストファイルのOpenとClose
テキストファイルを扱う際は、扱う前にOpenで開き、扱い終わったらCloseで閉じる必要があります。
一般的な構文としては
Open ファイル名 For 目的 As #番号
で開き
Close #番号
で閉じる、という書き方です。ファイル名はフルパスで指定します。
Openについてですが、目的がOutputになっていればファイルを書き込み用として開きます。該当のファイル名が存在していない場合は、新規のテキストファイルが作成されます。
目的のパラメータをまとめますとそれぞれ以下の通りです。
- Input:読み込むために開く場合
- Output:書き込むために開く場合
- Append:追記する場合に開く場合
「#番号」は一般的には「#1」としておけばOKです。
テキストファイルに一行ずつ書き出す
変数の値をテキストファイルへ一行ずつ出力する場合はPrintを使って
Print #番号, 変数
と書きます。もちろん、変数のかわりに特定のセルの値を
Print #1, ws.Cells(i, 1).Value
と指定することもできます。
まとめ
以上、エクセルVBAでテキストファイルにデータを書き出す最も簡単なプログラムについて解説をしました。
テキストファイルの読み取りとテキストファイルへの書き出しはものすごく似ているので、合わせて覚えてしまえば効率よいですね。
今回は拡張子がtxtのテキストファイルについてお伝えしましたが、次回はいよいよCSVの場合についてもお伝えしていければと思います。
どうぞお楽しみに!