Excelから行ごとにファイル出力

希ですが、Excelファイルにあるデータを行ごとにファイルへ出力したいことがあります。私の場合、あるソフトウェアに収集データを投入するため、この作業が不可欠です。

ファイルを結合するというのはテキストファイルならコマンドラインで簡単にできますし、部分的な抽出も用意ですが、全行をそれぞれとなると面倒です。

当然、手作業で行っていてはやっていられないので、VBAで処理していますが、希な作業のため、毎回、調べ直しています。これも無駄なので、自分用メモを兼ねて以下にVBA例をあげます。

Sub save2File()
    ' Dim ws As Worksheet
    ' Set ws = ActiveWorkbook.Worksheets(1)
    
    Dim i As Integer
    i = 2
    
    Dim datFile As String
    
    Do While Cells(i, 1).Value <> ""
        datFile = ActiveWorkbook.Path & "\files\" & Cells(i, 2) & ".txt"
        Open datFile For Output As #1
        Print #1, "記述1"
        Print #1, Cells(i, 21).Value
        Print #1, ""
        Print #1, "記述2"
        Print #1, Cells(i, 22).Value
        Close #1
        i = i + 1
    Loop

End Sub

上の例ではExcelファイルのあるフォルダーに「files」というフォルダーを事前に用意しておくこととしています。このフォルダー内へ2列目をファイル名とし、21,22列目をその内容としたテキストファイルを生成しています。

“Excelから行ごとにファイル出力” への2件の返信

  1. とても実用的なVBAの例のご提供ありがとうございます。
    同じ作業に直面してるので、大変効率化できました。
    ところですが、出力したファイルはANSI文字コードで保存されますが、UTF-8文字コード変換手間が残ってしまいました。テキストサイドに出力する時に文字コードUTF-8として保存する修正は、どうしたらよろしいでしょうか。ご教示いただけると幸いです。

    1. お役に立てて幸いです。

      個人的には多数ファイルの文字コード変換にはコマンドラインでnkf、最近ではiconvを用いています(単発の文字コード変換は秀丸エディタで実行)。nkfもiconvもいわゆるUNIX系のコマンドラインツールですが、Windows上でもcygwinやWSLで使用できます。私はcygwinを使っています。

      VBAで実現するためにはファイル書き出しをここに記載してある方式からADODB.Streamを使う方式に変更すれば実現できます。「ADODB.Stream UTF」などで検索していただくと書き出し方について説明されているサイトが多数ありますので、その方法を組み合わせるとUTF-8で保存できると思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です