• 締切済み

VBAで「"」[']をエスケープする方法

PHPで作成したプログラムからCSV形式でデータを出力し MSエクセル2000のVBAで取り込んでいます。 データに「,」があるとデータが分割されてしますため 「""」で囲んだところ上記の問題は解決しました。 しかし、今度は「"」部分でデータが分割される現象が起こっています エスケープ方法、または他の解決方法はありますでしょうか? 例  (1)「あいう,えお」→「あいう」「えお」に分割される  (2)「"あいう,えお"」→「あいうえお」で問題ない  (3)「"あい"う,えお"」→「あい」「う,えお」に分割される  (4)「"あい'う,えお"」→「あい」「う,えお」に分割される  (5)「あいう"えお」→「あいう"えお」で問題ない 「,」が解決すると「'」「"」問題が生じ、逆も又同じで困っています 以上、ご教授よろしくお願いします

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

(3)「"あい"う,えお"」 "あい""う,えお" で問題ないと思います。 (4)「"あい'う,えお"」 分割されませんでした。

全文を見る
すると、全ての回答が全文表示されます。
  • e10go
  • ベストアンサー率38% (47/122)
回答No.2

こんばんわ。 ExcelでCSVデータを取り込むと、ご質問の例のようにはなりませんが、「"」(ダブルクォーテーション)、「,」(カンマ)を組み合せたデータでは、意図しない区切りになる事は確かです。 「あいう,えお」→「あいう」「えお」 「"あいう,えお"」→「あいう,えお」 「"あい"う,えお"」→「あいう」「えお"」 「"あい'う,えお"」→「あい'う,えお」 「あいう"えお」→「あいう"えお」 上のようになります。 ご存知と思いますが、CSVデータは、データとデータの区切りに「,」を使っています。 また、Excelでは、データの先頭に「"」があると、「"」を取り込まずに、「"」と「"」の間を文字データとして取り込みます。 そのため、上の左のデータを取り込めば、上の右のようになると思います。 私のパソコン環境(WinXP Pro,Excel2000)では、そうなります。 それを前提に、対策を取るとすれば、データ内の「,」を別の文字に変えておいて、Excelに取り込んだ後に「,」に戻すのはどうでしょう。 例えば、下の右のように「,」を「゜」に変えて置き、Excelに取り込み後、「゜」を「,」に戻す、です。 「あいう,えお」→「あいう゜えお」 「"あいう,えお"」→「"あいう゜えお"」 「"あい"う,えお"」→「"あい"う゜えお"」 「"あい'う,えお"」→「"あい'う゜えお"」 Excelに取り込み後、「,」に戻すコードは、以下の通りです。 Cells.Replace What:="゜", Replacement:="," もし、「'」が問題になるようでしたら、「'」を「^」に変えて、 「"あい'う,えお"」→「"あい^う゜えお"」 Excelに取り込み後、下のコードで、戻せばよいでしょう。 Cells.Replace What:="゜", Replacement:="," Cells.Replace What:="^", Replacement:="'"

noname#59240
質問者

お礼

ご回答ありがとうございます 別の文字に置き換えるで対応しました。

全文を見る
すると、全ての回答が全文表示されます。
noname#35109
noname#35109
回答No.1

よくわかりませんが, 「,」ではなく「Tab(\t)」でセル分け(列分け)をすれば良いのではないでしょうか? どちらもCSVファイルとしてExcelに認識されますよ。 (PHPもVBAもほとんどわかっていない者です。)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAの「,」カンマのエスケープの方法

    現在、あるプログラム(PHPで作成)からcsv形式でデータを出力しています。 このデータをエクセル2000のVBAで取り込んでいますが、 「,」があるとズレてしまいます。 VBAではどの様に「,」エスケープすればよいのでしょうか? 以上、ご教授よろしくお願いします。

  • エクセルVBA:日付データの変換がうまくいかない2

    http://okwave.jp/qa/q7615238.html の続きです。 問題内容が変わってしまったので、改めて質問させていただきます。 困っているところは、日付のセルのデータ表示をyyyy/mm/ddに固定したいのですがうまくいきません。 前回返信頂いた内容を参考に頑張ってみたのですが、以下のような現象に陥りました。 (1)1回VBAプログラムを通すと、CSVファイルにyyyy/mm/ddの日付データが書き込まれる。 (2)【その後、csvファイルを閉じて、もう一度csvファイルを開くと、mm/dd/yyyyの形式に戻っている。】 (2)の現象がなぜ起きるのかわかりません。MSの仕様なのでしょうか? どうしようもないのでしょうか?

  • エクセル2003で作ったVBAが2007で動かない

    現在、エクセル2003で作成したVBAがエクセル2007だと、マクロを有効にして起動させようとするとコンパイルエラーとなって動作しない現象が起きていて困っています。 どなたか、解決方法をご教授頂けないでしょうか? ・VBAを含んだファイルを開いて、マクロを有効にすると ”コンパイルエラー:変数が定義されていません” というエラーボックスが出てきてプログラムの矢印のポイントがPrivate Sub User Form_Initialize() のところを指したまま止まってしまう。 ・このVBAはエクセルの表の書かれたデータをRS-232Cで出力するようなプログラムが使われていて、MSCommというものが使われています。この関連のプログラムが2003と2007では互換がないということはありますでしょうか? どうぞ、よろしくお願い致します。

  • CSVファイルを手で開いた後VBAを動かしたい

    すみませんが教えてください Excel VBAで、SaveしてあるCSVファイルを開くのは良く見ます でも、この方法ではなくて、あるシステムから切り出してきたCSVファイル を開いた状態からVBAを動かすにはどうしたらよいでしょうか? 理由は、どうも日付データがSaveしてしまうと消えてしまうようで、 (システムから切り出したCSV・・・2013-01-06 00:00:00) (SaveしたCSVを読み出すと・・・0000-00-00 00:00:00) このためSaveしたCSVファイルを開いてVBAを動かすことができません Excel形式にしてSaveしても同様です 何かもっと良い方法がありますか?

  • ExcelのVBAでCSVを読み込むと通貨になる

    Excel2010のVBAでCSVファイルを読み込んで処理させたいのですが、読み込んだデータをExcelが勝手に別のデータに変えてしまうので困っています。 例えば、123,456というデータは、フィールドにカンマがあるので、CSVでは"123,456"となりますが、これを以下のようなVBAのコードで読み込ませると、書式が通貨として扱われてしまって、データも123456になってしまいます。文字列として読み込まれていれば正しいデータとして読み込まれるように思うのですが、文字列として読み込ませる方法が分かりません。正しく元のデータ123,456のまま読み込ませるにはどうすればいいのでしょうか。 なお、CSVの各フィールドにカンマやダブルクォーテーションが混在していると、各フィールドに分割する処理が複雑でよく分からないので、下記のコードのようにExcelの機能でCSVを各フィールドに分割される方法で読み込ませたいです。 よろしくお願いします。 Workbooks.Open Filename:= "file.csv"

  • エクセルVBA レイアウト変更CSV出力

    みなさまお助け下さい・・。 エクセルのVBAを使用して、データの並替えとCSVの出力をしたいです。 詳細な内容は添付の画像に記載しました。 何卒解決方法をお教え下さい。 よろしくお願いします。

  • VBA?C?なにを使えばよいでしょうか

    あるアプリケーションにデータ登録をするときに、現在はコマンドプロントから コマンド(c:\>xxxxx -***** "name" "age" ・・・・)を打って登録しています。 最近急に、データ量が増えて手動で登録するのが困難になってきました。 現在このデータはエクセルで保存してあります。これからも、エクセルで 管理していく予定です。 そこで、エクセルに入力したものをエクセルVBAを使ってセルからデータを 取り出して、1件づつ自動でアプリケーションに登録するコマンドを発行したい と考えています。 それか、エクセルのデータをCSV形式にしてC言語で作ろうかとも思っています。 実現したいことは ・データはエクセルで管理している。 ・毎回手動でコマンドをたたいていたのを、プログラムで実現させたい。 (DOSにコマンドを発行する) ・データの入力はCSVを読むか、エクセルシート上でセルからひっぱって くるか。 VBA、Cともに初心者です。どの言語でどういう風な形で プログラムを作ればよいかわからず困っています。 実現するよい方法をおしえてください。よろしくおねがいします。

  • EXCEL VBAでのCSV出力について

    EXCELに入力されたデータをCSV出力するプログラムを作成しました。データには日付が入っており年月日がYYYY/MM/DDの形で入力されています。これをハンド作業で名前をつけて保存でCSVに出力すると年月日はそのままの状態で保存されますが、VBAで保存するとMM/DD/YYYYの形になってしまいます。この状態で保存されると、次にEXCELで読み出すと年月日が文字列扱いになってしまいます。新しいマクロの記録で行っても結果は同じでした。 VBAで保存する際、YYYY/MM/DDで保存する方法はないでしょうか。 また、MM/DD/YYYYで保存されたCSVを日付としてEXCELに認識させる方法はあるでしょうか。 教えてください。よろしくお願いします。

  • カンマ区切りCSVファイルをVBAで読み込みたい

    こんにちは。EXCELのVBAに詳しい方、どうか教えてください! カンマ区切りCSVファイルをEXCELに読み込みたいのですが、 CSVファイルのデータが金額のため、データ自体にもカンマが含まれていて、 金額のカンマでも分割されてEXCELのセルに収まってしまいます。 データの区切りのカンマと、金額のカンマを区別して読み込む良い方法はないでしょうか。 とても困っているので、お解りになる方どうかご回答をお願いいたします。 ・CSVファイルのデータ   1,000 , 2,000 , 1,500 , 3,000 , 1,000 , 2,500 , 2,000  ↑金額のカンマでデータが分割されないように読み込みたいのですが・・・

  • htmlタグがあるデータのエスケープ処理

    今 phpを勉強していて自分の勉強用にブログを作ろうと思っています。 ですが、その事で分からないことがあり、質問させていただきます。 それは、データベース内にある記事データのエスケープ処理についてです。 記事データを日付順やカテゴリーごとに並べて出力する際にエスケープ処理をすると htmlタグがもちろんそのまま出力されてしまいます。 自分が参考にした本では出力するデータは全てエスケープするべきだと書かれていましたが、 今回のようなケースはどうすればいいのでしょうか? 1, ユーザー入力ではなく、運営者のみが入力するデータの場合、エスケープは必要ないのでしょうか?   その場合セキュリティの問題はないのでしょうか? 2, それとも全ての場合においてエスケープ処理は必要で、htmlタグを含んだデータを   データベースに入れるのが問題なんでしょうか? どなたか回答お願いします。

    • ベストアンサー
    • PHP