- 締切済み
CSV形式での保存時に”文字列引用符”にしたい(エクセル)
データのアップデートに、CSV形式でのファイルから一括アップロードができるのですが、データ内容に条件があり、文字列についてはダブルコーテーションで括ることになっています。 ”千代田区日本橋”,”1丁目1-1”, といった感じなのですが、エクセルから保存する時に一括で「”」が入る方法はあるでしょうか? 普通にCSVで保存すると、入りません。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >プログラムありがとうございました。ただ使う人間が理解できないので、使えませんでした。ごめんなさい。 CSVの「" "」で囲うマクロって、ある種定番ですから、どなたか分る方に組んでもらってください。#4さんには失礼かもしれませんが、Excel内で出来るものを、わざわざ外部ツールまで使う必要性はないと思います。そうしないと、いつまで経っても、Excelは不便さが残ってしまいます。 それから、お仕事で、VBA禁止の場合のご質問は、最初から、その旨を書いてくださいね。分らないから聞いていらっしゃるのでしょうから、手順まで書いてありながら、「理解できないから、使えません」なんて言うのは、とてもおかしな対応だと思います。
- imogasi
- ベストアンサー率27% (4737/17070)
下記だと、プログラムが簡単に済みます。やってみてください。 DOS-Basic時代からある、Input,Writeステートメントの特徴を最大限使ってます。 Sub test01() Open "Book1.csv" For Input As #1 Open "Book2.csv" For Output As #2 While Not EOF(1) Input #1, s1, s2 Write #2, s1, s2 Wend Close #1 Close #2 End Sub ーーーーー 修正必要個所 (1)インプットファイル名のBook1,アウトプットファイル名Book2のところを質問者に合わせて変えてください。 (2)1レコード(メモ帳で1行)の項目数により Input #1, s1, s2 Write #2, s1, s2 のS1,S2,・・を増やしてください。上記は2項目の例です。 実際テスト例示 (実行前のインプットファイル)メモ帳で 12,a 34,sd 23,f 45,ghj (実行後) アウトプットファイル(メモ帳で確認) 12,"a" 34,"sd" 23,"f" 45,"ghj"
お礼
プログラムありがとうございました。ただ使う人間が理解できないので、使えませんでした。ごめんなさい。
Excel側で処理するのは他の方にお任せして、CSVファイルを加工する方法を紹介します。 御希望のことは「テキスト(CSV)ファイル変換」というソフトでできると思います。ちょっと前にCSVを扱うツールをいろいろ試してみたのですが、指定した列だけに引用符を付加できるのは、私が探した限りではこれだけでした。ただし、レコードごとに列数が違うとうまくいかないので、空白セルにはダミーを入れておく必要があります。引用符をつけた後はテキストエディタで一括削除してしまえばいいでしょう(ちょっと面倒ですけどね)。 とにかく、全部の列に引用符を付けるのなら「IKARI」というツールでもできました。他にも何種類かあるかもしれません。 私の場合ですが、ファイルが大きかったのでGUIのツールはどれも使えませんでした(古いマシンだったので固まってしまった)。結局、AWKで簡単なスクリプトを書いて処理しました。うまくいかない場合は、このようなスクリプト言語を使うのも手だと思います。
お礼
おもしろいソフトのご紹介ありがとうございました。指定した列だけにつくので、使えそうです。 ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 簡単なコードですみませんが、こんなもので出来るはずです。現在のコードでは、すべて、文字列として、「" "」クォーテーションで括ってしまいます。数字との区別はありません。 一応、標準モジュールに登録してください。 Alt + F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。 次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、以下のコードを貼り付けて、再び、Alt + F11 で、画面を閉じます。 後は、Alt + F8 で、CSVEport_W_Qt を実行してみてください。(プロシージャーの名前は任意ですから、和名を付け直しても結構です。) '-------------------------------------------- Option Explicit Sub CSVExport_W_Qt() Dim Fname As String Dim usedRng As Range Dim i As Long, j As Long Dim buf As String Dim Fno As Integer Const Qt As String = """" Fname = Application.InputBox("出力名を入力してください。", Type:=2) If VarType(Fname) = vbBoolean Or Fname = "" Then Exit Sub If InStr(Fname, ".csv") = 0 Then Fname = Fname & ".csv" Fno = FreeFile() Open Fname For Output As #Fno With ActiveSheet Set usedRng = .UsedRange On Error Resume Next For i = 1 To usedRng.Rows.Count For j = 1 To usedRng.Columns.Count If Not IsEmpty(usedRng.Cells(i, j)) Then buf = buf & "," & Qt & usedRng.Cells(i, j).Value & Qt Else buf = buf & "," End If Next j Print #Fno, Mid$(buf, 2) buf = "" Next i On Error GoTo 0 End With Close #Fno Beep End Sub '--------------------------------------------
お礼
プログラムありがとうございました。ただ使う人間が理解できないので、使えませんでした。ごめんなさい。
- sanbit
- ベストアンサー率32% (16/50)
エクセルで保存する時CSVを選択すると、CSV形式(Comma Separated Value) になっています。 メモ帳かワードパットを開けて確認してみてください。 ホストに送信する時、よく行ってました。
- tetsus_2000
- ベストアンサー率67% (467/696)
残念ながら、Excel自体には" "囲いでCSV出力する機能はないと 思います。 ただ、筆丸などのテキストエディタ あるいは Wordを使えば、 簡単に置き換えできますので、それでおやりになったらいかが ですか。 例えば、Wordであれば、 ・先頭に「"」を挿入 ・「,」を「","」に置き換え ・改行記号を「"改行記号"」に置き換え ・最後の「"」を削除 といった感じで、相当巨大なCSVファイルであっても、ほんの数十秒 もあれば完了します。 ただ、元々のデータ中に「4,000円」というようにカンマ区切り のデータが存在している場合はちょっとやっかいですね。
お礼
機能が無いとのご連絡ありがとうございました。1番良いのがEXCELに機能があることなのですが、大変残念です。
お礼
マクロはオート登録以外使った事が無く、VBAを使ったプログラムは、やったこともありません。質問した時には、エクセルのどこかに機能があるのではないか、との期待から質問させていただきました。エクセルには無いことがわかりましたので、エディターの一括変換で現在は対応しています。 >手順まで書いてありながら との事ですが、どこのボタンを押していけば、VBA入力になるのかまったくわかりません。貴方様のようなある程度の知識を持っていない私にとって、恥ずかしいことでもあり、大変失礼とは思ったのですが、正直に理解できないと申しあげたわけです。それ以上の他意はございませんので、お許しください。