日常~おまけ雑記~

日常にほんの少し活力を~毎日の出来事やオーディオなど趣味のことを紹介するブログです



エクセルVBAでテキストファイルを作成する

エクセルのシートにある表を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行ずつ追加したり、都度新しいファイル名のテキストデータを出力したりといろいろ応用は出来るかと思いますのでご活用出来れば幸いです。

 


 

www.omake-zakki.com

www.omake-zakki.com

www.omake-zakki.com