レコード毎にフィールド数が異なる状態でテキストファイルに出力するには?

Question 99.4 Excel VBA Borad (掲示板)より Previous Next
Aというシステムからダウンロードしたデータ (※1) を、Bというシステムへそのままアップロードする、という作業を毎月しています。
が、Aのシステムで作られたデータに不備があるので、Aシステムからダウンロードした .txtファイルを Excelで開き、不備のある数字を上書きして、Bシステムへアップロードしたいのです。
このとき、末尾にカンマ数が多すぎるとエラーになり、Bシステムへアップロードできなかったので、Aからダウンロードした形 (※2) にして保存しなおしたいのです。
よろしくおねがいいたします。
   (※1) フィールド数が一定でないレコードで構成されている.txtファイル
   (※2) 最終列の後ろに1つのみカンマがつく)
Answer   2010.1.24 永井善王
私は只今、次に出版する本の執筆中で多くの時間を割くことができませんので、下図のように、ダウンロードした「そのまま.txt」ファイルと、それを読み込んだワークシートがあった場合を例にして、考えてみましょう。
データの不備を修正するために、そのワークシートのC2セルにデータを追加入力し、C3セルのデータを削除すると下図のように変わります。
この状態で下記マクロを実行すれば、右図の「修正後.txt」のとおり、空白でないセルの値だけがテキストファイルに出力されます。各レコードのデータの末尾のカンマは1つだけになります。
Sub レコード毎にフィールド数が異なる状態でテキストファイルに出力する()
    Worksheets("Sheet1").Activate
    Open "D:\修正後.txt" For Output As #1
    下端行 = Range("A" & Rows.Count).End(xlUp).Row
    For 行 = 1 To 下端行
        出力 = ""
        右端列 = Cells(行, Columns.Count).End(xlToLeft).Column
        For 列 = 1 To 右端列
            出力 = 出力 & Cells(行, 列).Value & ","
        Next
        Print #1, 出力
    Next
    Close #1
End Sub
では、さっそく試してみて結果をご連絡ください。お待ちしています。

【参考】
ワークシートのデータを名前を付けて保存するときに、右図のように [CSV] を選択すれば、カンマ区切りのテキストファイルとして下図のとおり出力できます。








このファイルの拡張子を「.txt」に変更すれば、上記のマクロで作成したファイルに似たファイルができますが、各レコードのフィールド数が揃えられてしまいデータの末尾のカンマが1つだけになりません。

 

Excel VBA Macro