• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:助けてください!CSVファイル作成)

助けて!エクセル97で作成した表データをCSV形式にする方法を教えてください

このQ&Aのポイント
  • エクセル97で作成した表データをCSV形式にする方法を教えてください。取引先から要請され、保存形式をCSVに変換しようと思いましたが、一つの表をワンレコードに変換する必要があるとのことで、256列を超える表データをエクセルの1行に収めることができません。
  • エクセル97で作成した表データをCSV形式に変換する方法を教えてください。取引先から要請され、1行あたり256列を超える表データをワンレコードに変換する必要があります。
  • エクセル97で作成した表データをCSV形式に変換する方法を教えてください。取引先から要請され、256列を超える表データを1行に収める必要がありますが、エクセルの1行に収まらないため困っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

必ずしも#2のお答えのようでもないケースがあり得ると 思う。 列数がずっと変らないのなら、先方で右端列で改行を入れることはたやすい。 UNIX系のストリームなどは終わりまで一続きではなかったかな。なにはともあれ、先方に良く聞くことです。 レコードの終わりは改行コードを入れるのか、復帰改行コードを入れるのか、ファイルの終わりのコードは等々。 ---- CSVファイルの例。 行の終わりに改行コードを入れていません。 終わりまで一続き。 Sub test01() d = Range("a1").CurrentRegion.Rows.Count r = Range("a1").CurrentRegion.Columns.Count MsgBox d MsgBox r Open "text2.csv" For Output As #1 s = "" For i = 1 To d For j = 1 To r If i = d And j = r Then GoTo end1 If IsNumeric(Cells(i, j)) Then Print #1, Trim(Str(Cells(i, j))); ","; Else Print #1, Cells(i, j); ","; End If Next j Next i end1: If IsNumeric(Cells(i, j)) Then Print #1, Trim(Str(Cells(i, j))) Else Print #1, Cells(i, j) End If Close #1 End Sub

AQUALINE
質問者

補足

さっそくコードをありがとうございます。 標準モジュールにコピー&ペーストして試したところ表の行数列数のメッセージボックスまではでましたが、text2.csvはできてきませんでした。どうすればよろしいdしょうか?

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

#3です。s=””は余分です。別のことを考えていて入れて、消し忘れです。済みません。取りあえずこの点だけ。

AQUALINE
質問者

お礼

うわあ! こんなに朝早くにありがとうございました!

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#3です。 >text2.csvはできてきませんでした。 再度やって見ました。私の場合データのあるセルが少数の例ですが出来ました。ただtext2と言うファイルが出来ました。メモ帳で開き確認しました。本番のデータで1レコードのバイト数があまり大きいと制限に引っかかって上手く行かない恐れがあると思います。 少数の例でもうまくいかないかやって見てください。 あとd = Range("a1").CurrentRegion.Rows.Countのdは、A1のブロックの最下行をとってくるものですが、本番データを見て、直接最下行d=100やr=10(右端列)にかえて、またFor i = 1 To dの1もデータの開始行を指定して、やって見てください。本番のデータ開始行の関係で色々あり得るので。

AQUALINE
質問者

お礼

先ほど補足に1.および2.で質問した件、あちこちのネットの記載を見よう見真似で以下のようにしたら解決しました。(エクセルシートのデータは縦一列のみとしました。) これで一応動くのですが何か問題がありますでしょうか? Sub test01() Filename = Application.GetSaveAsFilename(InitialFilename:="TEST.csv", fileFilter:="CSV File(*.csv), *.csv") If Filename = False Then Exit Sub Open Filename For Output As #1 s = "" For i = 1 To 500 Print #1, Trim(Cells(i, 1)); ","; Next i Close #1 End Sub ただ、上記で「s = ""」の意味がわかりません。 どういう意味なのでしょうか? 教えていただけると幸いです。

AQUALINE
質問者

補足

さっそくありがとうございました。 text2.csvはできていました。MyDocumentにはいっていたので気づかなかっただけでした。すみません。 それで以下の2点を再度教えていただきたいのです。 1.作成されるcsvファイルを保存する先(フォルダー)およびファイルの名前をダイアローグボックスで指定できるようにしたいのです。 2.表にはブランクのセルもありますので、ブランクはブランクとしてデータに入れたいのです。現在はブランクのセルのところで処理が終わってしまうのでCurrentRegion.Rows.Countを使わず、直接最下行を指定しましたが、空白セルはcsvファイルでは0となるようで、txtに変換しても ,0, と0が出てしまいます。 勝手を申しましてすみませんが、何卒よろしくお願いします。

  • the845t
  • ベストアンサー率33% (246/743)
回答No.2

ちょっと確認。 1列のデータにしろとのことなのに、1行にしようとしていませんか? 例えば、 名前,住所,電話番号,備考 これで1列なのでは?

AQUALINE
質問者

補足

> 1列のデータにしろとのことなのに、1行にしようとしていませんか? ありゃりゃあ!済みません、質問を書き間違えていました。 先方は1行のデータにしろと言ってきたのでした。 だから256列を越えてしまうのです。

  • myeyesonly
  • ベストアンサー率36% (3818/10368)
回答No.1

こんにちは。 そういう風にするには、一度エクセルでCSVに保存してから、テキストエディタ(ワードでも出来ますが)などで、改行記号をカンマに置換してしまえばいいと思います。 なお、この作業はエクセルのマクロやビジュアルベーシックなどを使って自動化も簡単です。 ただ、問題は復元した時、どのように復元されるかですが、それは先方と打ち合わせるよりないでしょう。 先方がどのような方法で復元するのか、エクセルではないのかもしれませんし。 先方の要望にできるだけこたえるべきでしょうから。

AQUALINE
質問者

補足

さっそくありがとうございます。 一度エクセルでCSVに保存してから、テキストエディタ(ワードでも出来ますが)などで、改行記号をカンマに置換えるということは、エクセルで1行ではなく1列に長い表に作り替えてCSV保存ということですね? >この作業はエクセルのマクロやビジュアルベーシックなどを使って自動化も簡単です。 どのようにVBAを記述すればよいのでしょうか? 毎回出てくる作業で、しかも私以外の人間にもやってもらうことになるので出来れば自動化したいのです。