- ベストアンサー
エクセル2010 CSVレイアウト崩れ
- エクセル2010でCSVファイルを読み込むとレイアウトが崩れてしまう問題について
- CSVファイルの改行部分が原因でエクセルのレイアウトが崩れる
- 改行コードの解釈の問題やダブルクォーテーションのコードの解釈の違いが考えられる
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >「ひょっとして改行コードの解釈の問題(例のLF+CRの問題)か? 最初にネックになるのは、それです。CSVは、基本的には、Unix型、Win/Dos型、Mac型と三種類あって、CSV代表的なのは、Unix型です。私は、Win/Dosがほとんどですので、Unix型が標準なのに、それに慣れていないせいか、とてもややこしく感じます。 >テキストエディターで調べると、長文内の改行部分で次のセルに移動してしまっている。 私は、CSVインポートが失敗した時は、「NotePad++」を使って、調べることが多いです。(便利なツールですが、インストールが面倒で、使用方法も重装備でややこしいです。)ただ、これでなくても、テキストエディタで、改行コード/復帰コードの見分けの付くものがありますから、それでもよいです。 >もしくはダブルクォーテーションのコードの解釈の違いがあるのか そのとおりです。私は、Excelの問題だと思っています。それは、文字型と数値型の区別がないということです。全部、Variant型(中間型)になってしまいます。 そのデリミタ(,)といっしょについている改行コードやバイナリコードが、分かりさえすれば、半分は解決すると思うのです。残りの半分は、今度こそ、本格的に、バイナリエディタあたりで、調べないといけない種類です。ここらになると特殊すぎて、VBAの教本でしかやったことはありません。 >「一発でCSVファイルを正しく読み込んでくれるモジュールがあるよ データベースのテキストデータ用のフリーツールを、「窓の杜」で見た記憶はあるのですが、Excelに直接インポートとなると、個別のモジュールを作らないと、既存のツールで提供しても必ずしもうまくいくとは思えません。Excelに入れても、不要な機能も多く入って重くなってしまいかねません。 ヒントだけになりますが、基本的には、以下のようなスタイルのVBAでするしかないのかなって思います。VBAが分かれば、イメージは沸くと思います。 FNum = FreeFile() Open FileName For Input As #FNum Do While Not EOF(FNum) Line Input #FNum, textLine iCount = iCount + 1 myArray = Split(textLine, ",") 'デリミタは、「,」● Cells(iCount, 1).Resize(, UBound(myArray) + 1).Value = myArray Loop Close #FNum ●の前処理なら、textLineに、Replace関数を使います。 "" (ダブルクォーテーション)は、一応、削除になります。 改行コード(LF)と復帰コード(CR)が分かれている場合は、置換値のvbCrLfは、そのまま使えないこともあります。その置換の組み合わせを考えながら、進めないといけません。また、セル内改行のLFコードがあるようですから、例えば、一端別のものに置き換えるとかして、たぶん、二回か三回の置換になるような気がします。今のところは、想像の範囲です。 >自動的にセル内の文章を全部表示できるサイズに各行や列を自動調節できるようにしたい なお、これは、インポートが完成してからで、今、ここでは、後にしてください。