エクセルのシートにある表をVBAでテキストファイルとして出力します
今回は表をカンマ区切りのテキストデータの形でテキストファイルに書き込みするものです。
■下記表のD列をテキストファイルに書き出しします
列ABCの値を行ごとにD列にカンマ区切りとなるように式を入れておきます。
例えば1行目にはこんな具合です。
=A1&","&B1&","&C1
そしてテキストファイルとして出力した結果がこうなります。
わかりにくいのですが、今回のエクセル表は5行目までしかありませんが、VBAでは10行目まで出力指定しているのでテキストファイルには5行分の空白も出力されています。
■VBAの記述内容
Sub TEXTFILE()
Dim objFileSys As Object
Dim strScriptPath As String
Dim strReadFile As String
Dim strWriteFile As String
Dim objReadStream As Object
Dim objWriteStream As Object
Dim strText As String
Set objFileSys = CreateObject("Scripting.FileSystemObject")
strScriptPath = ThisWorkbook.Path
strWriteFile = objFileSys.BuildPath(strScriptPath, "出力結果.txt")
Dim str As String
Dim d As Long
For d = 1 To 10
str = ActiveSheet.Cells(d, 4)
Set objWriteStream = objFileSys.OpenTextFile(strWriteFile, 8, True)
objWriteStream.WriteLine str
objWriteStream.Close
Next d
Set objWriteStream = Nothing
Set objFileSys = Nothing
End Sub
■解説
●ここではエクセルbookのある同じディレクトリにテキストファイルを生成するように指定しています。また、テキストファイル名も指定しています(出力結果.txt)
Set objFileSys = CreateObject("Scripting.FileSystemObject")
strScriptPath = ThisWorkbook.Path
strWriteFile = objFileSys.BuildPath(strScriptPath, "出力結果.txt")
●アクティブなシートのセルD1からD10までの10行分の値を処理します。
For d = 1 To 10
str = ActiveSheet.Cells(d, 4)
●数値の8は追加、2は上書きです。TRUEはテキストファイル名が存在するときはそこへ書き込み、存在しないときは新規にテキストファイルが作成される。FALSEにするとテキストファイル名が存在すれば書き込み、存在しないときはエラーとなる。この行でテキストファイルが作成されます。
Set objWriteStream = objFileSys.OpenTextFile(strWriteFile, 8, True)
●テキストファイルに書き込みします。
objWriteStream.WriteLine str
■最後に
今回は一度に複数行の出力をしましたが、1行ずつ追加したり、都度新しいファイル名のテキストデータを出力したりといろいろ応用は出来るかと思いますのでご活用出来れば幸いです。