• 締切済み

列数の多いエクセルのデータをテキストファイル(スペース区切り)に変換するにはどうしたらいいでしょうか

列数の多い(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列   のようにしたいのですが可能でしょうか.

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

>#もうちょっと簡易的にできそうな気もしますけど ...なんて事を書いちゃってしまったんで、考えてみました。 参考程度です。 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 #あまりよく検証してないです。 #うまくいかなかったら捨て置いてください。

takaoandoh
質問者

お礼

ありがとうございました.なんとなく出来そうです.ただパソコンのプログラムに関して 素人で殆ど知識がありません.”マクロ”など勉強して試してみます.

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

「テキスト(スペース区切り)(*.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)
回答No.1

テキストファイル(スペース区切り) は、この名前とは違い、印刷イメージのファイルを作成する様ですね 拡張子が「prn」となってますし、改行位置が、用紙の幅になっていませんか? で、1行で保存する方法ですが、 CSV(カンマ区切り)で、保存した後、 メモ帳などのエディターに読み込み "," を " "(スペース)に置き換えます

takaoandoh
質問者

お礼

ありがとうございました.なんとなく出来そうです.

関連するQ&A