プロが教えるわが家の防犯対策術!

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

A 回答 (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

#あまりよく検証してないです。
#うまくいかなかったら捨て置いてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/10/10 23:24

「テキスト(スペース区切り)(*.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
    • good
    • 0

テキストファイル(スペース区切り)


は、この名前とは違い、印刷イメージのファイルを作成する様ですね
拡張子が「prn」となってますし、改行位置が、用紙の幅になっていませんか?

で、1行で保存する方法ですが、
CSV(カンマ区切り)で、保存した後、
メモ帳などのエディターに読み込み "," を " "(スペース)に置き換えます
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/10/10 23:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!