列数の多い(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件)
- 最新から表示
- 回答順に表示
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
#あまりよく検証してないです。
#うまくいかなかったら捨て置いてください。
ありがとうございました.なんとなく出来そうです.ただパソコンのプログラムに関して 素人で殆ど知識がありません.”マクロ”など勉強して試してみます.
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/04 12:47
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- PHP PHPでテキストファイルに保存した時の改行問題 1 2022/11/19 15:07
- C言語・C++・C# プログラムについて。 4 2023/07/19 13:43
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Excel(エクセル) エクセルで 1行目の固定とE列までの固定ができますか? 7 2022/10/21 04:56
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vbsでテキストファイル内の文字...
-
配列の値を置換するにはどうす...
-
excelの、ある数式内の{}の意...
-
エクセルへのデータの貼付時に...
-
C#の問題です。 文字列型の配列...
-
VBAのWorksheetFunctionの引数...
-
初心者プログラミング
-
in_addrからchar型の文字列の変換
-
copyRecordsetの数値16桁以上に...
-
VBSで特定の文字列が含まれる場...
-
COLUMN(1:1)の意味を教え...
-
VB.NET 2つの配列を連動して並...
-
列数の多いエクセルのデータを...
-
ruby "\\001\\376".unpack("C*"...
-
RichTextBoxの改行を認知してく...
-
エクセル、この関数の意味は?
-
C言語 exitの使い方
-
VBAでダブルコーテーション入り...
-
jsp~jspにhiddenを使って変数...
-
EXCEL/VBA 変数の値をクリップ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelの、ある数式内の{}の意...
-
配列の値を置換するにはどうす...
-
vbsでテキストファイル内の文字...
-
エクセルへのデータの貼付時に...
-
数値を浮動小数点32bitHEXコー...
-
COLUMN(1:1)の意味を教え...
-
初心者が簡単なPowerShellスク...
-
VBAのWorksheetFunctionの引数...
-
VBSで特定の文字列が含まれる場...
-
VB 配列の内容をファイルに書...
-
初心者プログラミング
-
VB6で配列を文字列に変換する方...
-
VBAで配列に文字列が入らない?
-
copyRecordsetの数値16桁以上に...
-
【エクセル】 関数による電子...
-
エクセル、この関数の意味は?
-
○桁にある数値を取得する VB.N...
-
RichTextBoxの改行を認知してく...
-
rubyによる2次元配列形式のデー...
-
ruby 1.8.7 で、多次元配列をソ...
おすすめ情報