Excel VBA でテキストファイルを作る方法

とりあえず、Excel VBA でテキストファイルを作る方法を記載。
これが出来るようになると、僕の仕事は格段に楽できるという…そのために。


Windows など、がっつり GUI で設定できるソフトが増えたけど、テキストで設定ファイルを作る機会も多い。
一部分だけ違うけど、似たようなテキストファイルを大量に作りたいときがある。
TeraTerm でのログインマクロなんて、もろにそう。
ログイン用に bat ファイルまで作ろうなんて思ったら、それこそ全部のファイルを開いて→ホストだけ書き変えて→保存して…を繰り返さなきゃ。
そういう単純作業が最も嫌なので、だったらまるっと作ってしまえという発想になる。


やり方はいくつかある。
(1) コマンドを作りこんだ Excel シートだけを、テキスト形式で保存する方法。
これ、複数列を使おうとすると、タブかカンマで区切られるんだよね。
簡単なんだけど。

(2) open/close ステートメントを使う方法。
あんまりやり方を知らないけど、ファイルに割り当てたナンバーを使って、書き込んだり読み込んだりできるっぽい。
そのうち利用してみたい。

(3) FileSystemObject (FSO) を使う方法
スクリプトを扱うライブラリを利用してスクリプトを扱うんだけど、僕は仕事でこれを扱ったことがあるので大概これを使ってる。
最初に教えてくれた先輩には、感謝の念を送りたい。びびび。


先輩が受信*1したところで、今回は(3)を使う。
でもって、オブジェクト型変数を使う方法で。


サンプルコードを、さくっと書いてみる。

Sub WriteTest()

' Object 設定
Dim FSO As Object       ' FileSystemObjectのインスタンス
Dim TXT As Object       ' テキストファイル用インスタンス

' String 設定
Dim TEXTFILE As String  ' 作成するファイル用変数

' 作るテキストファイル
TEXTFILE = "file.txt"

Set FSO = CreateObject("Scripting.FileSystemObject")
    ' 上書き     : する = true, しない = false (存在したらエラー)
    ' 文字コード : Unicode(UTF) = true, ASCII = false
    Set TXT = FSO.CreateTextFile(TEXTFILE, True, False)
        TXT.WriteLine ("改行つき文字列")
        TXT.Write ("改行なし文字列")
        TXT.Write ("だから、うまく使いわけるといい感じ。" & vbCrLf)
        TXT.Close
    Set TXT = Nothing
Set FSO = Nothing
MsgBox TEXTFILE, vbOKOnly, "処理完了"

End Sub

これを ExcelVBA で貼り付けて保存後、マクロを実行したら処理完了メッセージが出て、ファイルを保存したフォルダに file.txt ってのができるはず。
すくなくとも、Excel 2007 では(マクロを動かすために少し小細工が必要だったものの)動いた。


文字コードWindows で使うことが僕の意識にあるので、あえて ASCII で。
今回はやらないけど、逆に UNIX/Linux から持ってきたコンフィグ用テキストを読み込んで、即席で詳細設計書に仕立てるなんてのも面白そう。

*1:この場合の受信とは、念を受け取ったと根拠無く確信…の略