- 締切済み
列数の多いエクセルのデータをテキストファイル(スペース区切り)に変換するにはどうしたらいいでしょうか
列数の多い(200列くらい)エクセルのファイルをテキストファイル(スペース区切り)1行に保存したいのですがどのようにしたらいいのでしょうか. エクセルを普通にテキスト形式で保存すると200列 1行で保存されず,適当に折り返して3行くらいになってしまいます. 例えば 2行200列をテキストにすると 1行目 1~100列 2行目 1~100列 1行目 101~200列 2行目 101~200列 と4行になってしまいます.これを 1行目 1~200列 2行目 1~200列 のようにしたいのですが可能でしょうか.
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- end-u
- ベストアンサー率79% (496/625)
>#もうちょっと簡易的にできそうな気もしますけど ...なんて事を書いちゃってしまったんで、考えてみました。 参考程度です。 Sub try() Const outFile = "c:\temp\temp.txt" Dim rx As Long '対象行数 Dim ub As Long 'UBoundで得るprnファイル行数 Dim n As Long 'FreeFile番号 Dim i As Long Dim j As Long Dim k As Long Dim buf As String '読み込み文字列 Dim tmp, tmpX, ret '処理用配列 With ActiveSheet '行数取得 rx = .UsedRange.Rows.Count 'xlTextPrinterで保存 .SaveAs Filename:=outFile, FileFormat:=xlTextPrinter '閉じる .Parent.Close False End With n = FreeFile Open outFile For Input As #n 'xlTextPrinterで保存したファイルを一括読み込み buf = StrConv(InputB(LOF(n), #n), vbUnicode) Close #n '改行コードで分割し1次元配列に格納 tmp = Split(buf, vbCrLf) ub = UBound(tmp) '配列添え字変更とEOFをカット ReDim Preserve tmp(1 To ub) As String '保存ファイルの行数(配列tmp要素数)を実際の行数rxで割ると _ 分割数が出る? ReDim tmpX(1 To ub \ rx) As String '書き出し用配列の要素数を確定 ReDim ret(1 To rx) As String '書き出し用配列の要素数に合わせてLoop For i = 1 To rx k = 0 '行数rxの分、飛ばしてtmpをLoopして結合用配列に格納 For j = i To ub Step rx k = k + 1 tmpX(k) = tmp(j) Next '各行ごとに文字列結合 ret(i) = Join(tmpX) Next '処理後、配列を書き出し n = FreeFile Open outFile For Output As #n Print #n, Join(ret, vbCrLf) Close #n Erase tmp, tmpX, ret End Sub #あまりよく検証してないです。 #うまくいかなかったら捨て置いてください。
- end-u
- ベストアンサー率79% (496/625)
「テキスト(スペース区切り)(*.prn)」の場合、データが揃うように複数の空白文字が入る仕様です。 この、『複数の空白文字が入る仕様』が必要であれば少し工夫が必要になります。 prnファイルは240文字制限があるそうなので 『Excel で書式付きテキスト (.prn) の文字数が 1 行あたり 240 文字に制限される』 http://support.microsoft.com/kb/249885/ja ここに代替的なサンプルマクロが載ってます。 #もうちょっと簡易的にできそうな気もしますけど 単純に列区切りがスペース1個で構わず、桁区切り","を考慮する必要がなければ、ASIMOVさんの方法が簡単で良いと思います。 マクロでも良ければ以下のような感じでしょうか。 Sub test() '[ツール]-[参照設定]で『Microsoft Forms 2.0 Object Library』必要 Const outFile = "c:\temp\temp.txt" Dim s As String Dim n As Long ActiveSheet.Cells(1).CurrentRegion.Copy With New DataObject .GetFromClipboard s = .GetText s = Replace(s, vbTab, " ") .Clear End With Application.CutCopyMode = False n = FreeFile Open outFile For Output As #n Print #n, s Close #n End Sub
- ASIMOV
- ベストアンサー率41% (982/2351)
テキストファイル(スペース区切り) は、この名前とは違い、印刷イメージのファイルを作成する様ですね 拡張子が「prn」となってますし、改行位置が、用紙の幅になっていませんか? で、1行で保存する方法ですが、 CSV(カンマ区切り)で、保存した後、 メモ帳などのエディターに読み込み "," を " "(スペース)に置き換えます
お礼
ありがとうございました.なんとなく出来そうです.
お礼
ありがとうございました.なんとなく出来そうです.ただパソコンのプログラムに関して 素人で殆ど知識がありません.”マクロ”など勉強して試してみます.