質問: vbaで「"」[']をエスケープする方法 phpで作成したプログラムからcsv形式でデータを出力し msエクセル2000のvbaで取り込んでいます。 データに「,」があるとデータが分割されてしますため 「""」で囲んだところ上記の問題は解決しました。 しかし、今度は「"」部分でデータが分割される現象が起こっています エスケープ方法、または他の解決方法はありますでしょうか? 例 (1)「あいう,えお」→「あいう」「えお」に分割される (2)「"あいう,えお"」→「あいうえお」で問題ない (3)「"あい"う,えお"」→「あい」「う,えお」に分割される (4)「"あい'う,えお"」→「あい」「う,えお」に分割される (5)「あいう"えお」→「あいう"えお」で問題ない 「,」が解決すると「'」「"」問題が生じ、逆も又同じで困っています 以上、ご教授よろしくお願いします
回答: こんばんわ。 excelでcsvデータを取り込むと、ご質問の例のようにはなりませんが、「"」(ダブルクォーテーション)、「,」(カンマ)を組み合せたデータでは、意図しない区切りになる事は確かです。 「あいう,えお」→「あいう」「えお」 「"あいう,えお"」→「あいう,えお」 「"あい"う,えお"」→「あいう」「えお"」 「"あい'う,えお"」→「あい'う,えお」 「あいう"えお」→「あいう"えお」 上のようになります。 ご存知と思いますが、csvデータは、データとデータの区切りに「,」を使っています。 また、excelでは、データの先頭に「"」があると、「"」を取り込まずに、「"」と「"」の間を文字データとして取り込みます。 そのため、上の左のデータを取り込めば、上の右のようになると思います。 私のパソコン環境(winxp pro,excel2000)では、そうなります。 それを前提に、対策を取るとすれば、データ内の「,」を別の文字に変えておいて、excelに取り込んだ後に「,」に戻すのはどうでしょう。 例えば、下の右のように「,」を「 ゚」に変えて置き、excelに取り込み後、「 ゚」を「,」に戻す、です。 「あいう,えお」→「あいう ゚えお」 「"あいう,えお"」→「"あいう ゚えお"」 「"あい"う,えお"」→「"あい"う ゚えお"」 「"あい'う,えお"」→「"あい'う ゚えお"」 excelに取り込み後、「,」に戻すコードは、以下の通りです。 cells.replace what:=" ゚", replacement:="," もし、「'」が問題になるようでしたら、「'」を「^」に変えて、 「"あい'う,えお"」→「"あい^う ゚えお"」 excelに取り込み後、下のコードで、戻せばよいでしょう。 cells.replace what:=" ゚", replacement:="," cells.replace what:="^", replacement:="'"