

「よくある質問」とはちょっと違うと思います。
あるCSVファイルを、そのままダブルクリックするとエクセルで開いてくれるPCがあります。
そのようにして開くとレイアウト崩れはありません。
で、同じCSVファイルをエクセルの「データ」→「外部データの取り込み」→「テキストファイル」で読み込むと、レイアウトが崩れてしまうのはなぜでしょうか。
なぜこのような質問をするのかというと、ちょっと説明が難しいのですが、なるべく簡潔に箇条書きにしてみます。
1 まず、このCSVファイルは自社で使っているオリジナルのシステムがCSV形式で吐き出すファイルであるという事実
2 このファイルは、ところどころ長文があり、セル内で改行が必要。なので長文の部分はダブルクォーテーションで改行を含め全体を囲んである。
3 従来はCSVファイルをそのままダブルクリックして開いて、内容をチェックする時、担当者がエクセル上でセル幅や高さをマウスで調節して文章を読んでいた。なお、その際にレイアウト崩れは発生したことがないので、もともとのファイルのCSV形式はちゃんと整って吐き出されているものと思われる。
4 しかし、いちいち手動でそんなことをするのは大変だろうと、私がマクロでCSVファイルを読み取り、自動的にセル内の文章を全部表示できるサイズに各行や列を自動調節できるようにしたいと考えた。
5 具体的には、まずマクロを記録したエクセルファイルを開き、そこから次のシートに当該のCSVファイルを読み取らせればよかろうと考えた。
6 ところが、シートにCSVファイルを読み込ませるために冒頭のような読み込み作業を行ったら、同じエクセルの同じバージョン、同じPCなのにも関わらず、レイアウトに崩れが生じた。
7 具体的にどの部分でレイアウト崩れが起きているのかをテキストエディターで調べると、やはり長文内の改行部分で次のセルに移動してしまっている。
8 しかし、改行部はダブルクォーテーション内に収まっており、(そうでなかったらCSVファイルを直接ダブルクリックしてエクセルを開いた際にもレイアウト崩れが生じていたはず)自分でも訳がわからなくなる。
9 つまり、CSVファイルをテキストデータとして読み込んだ際、設定で「カンマでセル移動、ダブルクォーテーションを「文字列の引用符」に指定しているにも関わらず、エクセルがダブルクォーテーションを無視しているとしか考えられない
10 なぜこのような違いが同じエクセルで生じるのかがわからない
11 いろいろ調べると、「ひょっとして改行コードの解釈の問題(例のLF+CRの問題)か?もしくはダブルクォーテーションのコードの解釈の違いがあるのか??」と思い当たる。
…と、以上のような経緯があったわけです。
それにしても不可解な話なので、どなたかエクセルに詳しい方の解説がいただけたらなあ…と思うのですが、いかがでしょうか。
もしくはどこかに、「一発でCSVファイルを正しく読み込んでくれるモジュールがあるよ」的なアドバイスをいただけると非常に助かります。
よろしくお願いいたします。長文失礼いたしました。
No.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コードがあるようですから、例えば、一端別のものに置き換えるとかして、たぶん、二回か三回の置換になるような気がします。今のところは、想像の範囲です。
>自動的にセル内の文章を全部表示できるサイズに各行や列を自動調節できるようにしたい
なお、これは、インポートが完成してからで、今、ここでは、後にしてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Visual Basic(VBA) VBAで出力したCSVファイルの先頭にカンマを挿入したい 5 2022/10/14 12:20
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- HTML・CSS HTMLタグのあるCSVファイルを利用する方法 4 2023/03/19 14:41
- Visual Basic(VBA) VBA初心者です。電話番号の数字の前に0を表示させたいです。 2 2022/12/14 03:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SJISで、全角文字Aの文字コード...
-
wordで均等割り付けをするとき...
-
エクセル
-
VBA フォームのテキストボック...
-
PDFの改行URLを有効にす...
-
パワーポイントのテキストボックス
-
Chr(13)とChr(10)の違いは?
-
エクセルでセル内改行の複数行...
-
テラパッドで全ての改行削除は...
-
Word 途中で勝手に改行してしま...
-
テキストエディーター
-
excelで勝手に改行されます
-
タイ語の改行位置について
-
Tera Term のマクロでの改行コ...
-
WordにURLを載せると
-
英語圏の人々は英文に改行のス...
-
履歴書の志望動機の所で、「ま...
-
メールに添付する写真を並列さ...
-
オアシスのデータをメモ帳で読...
-
セル内改行をそんままテキスト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル
-
Word 途中で勝手に改行してしま...
-
Chr(13)とChr(10)の違いは?
-
wordで均等割り付けをするとき...
-
VBA フォームのテキストボック...
-
エクセルでセル内改行の複数行...
-
PDFの改行URLを有効にす...
-
履歴書の志望動機の所で、「ま...
-
Tera Term のマクロでの改行コ...
-
棒グラフ 横軸の縦書き2列にし...
-
【エクセル】セル最後にある無...
-
英語圏の人々は英文に改行のス...
-
パワーポイントのテキストボックス
-
バッチで指定ファイルの文末に...
-
Accessにインポートしようとす...
-
Excel セル内の最初と最後の改...
-
excelで勝手に改行されます
-
メールに添付する写真を並列さ...
-
WordにURLを載せると
-
イミディエイトウインドウの最...
おすすめ情報