• 締切済み

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