• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル→CSVにした時、スペースの数が違う)

エクセルからCSVに変換する際にスペースの数が異なる問題とその対処方法

このQ&Aのポイント
  • エクセルで作成したデータをCSVに変換する際、一部の行においてスペースの数が異なるという問題が発生しています。
  • 具体的には、名前と通し番号の間にスペースが10個程度入るが、一部の行ではスペースが入らずに名前にカンマと通し番号が続いて表示されます。
  • この問題の原因としては、エクセルの保存形式やデータの入力方法が関係している可能性があります。正確な回避方法のためには、ソフトの仕様や使用するエクセルのバージョンを確認することが重要です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>この例のキムラジロウの時のように、スペースの数が違って表示される理由がなぜなのか CSV出力は「セルに入力されているデータが、幅調整されずに、そのまま出力」されます。 元データの末尾にスペースが付いてしまっているデータは、そのスペースがそのまま出力されます。 元データの末尾にスペースが無いデータは、スペースが無いまま、そのまま出力されます。 たぶん「エクセルのファイルを作った時に元にしたファイルが、フィールドの幅が固定されたテキストファイル」だったのでしょう。 フィールドの幅が固定されたテキストファイルを読み込んでエクセルのファイルを作ると、「文字列型」になっているセルのデータは「末尾にスペースが付いたまま」セルに取り込まれます。 一方「後から行追加して、セルに手入力したデータ」には、末尾にはスペースは付きません。 そうなると、エクセルのファイルの名前が入力された列のセルには ヤマダ○タロウ○○○○○○○○○○○○○ スズキ○ハナコ○○○○○○○○○○○○○ タカハシ○イチロウ○○○○○○○○○○○ タナカ○アイ○○○○○○○○○○○○○○ キムラ○ジロウ サトウ○シヨウコ○○○○○○○○○○○○ と言うように、末尾にスペースがある物と、末尾にスペースが無い物が混在する事になります。 それをそのままCSV出力すれば、質問文に書かれた状態のCSVファイルが出来上がって当然です。 元のエクセルのファイルを開いて、すべてのセルを選択状態(反転状態)にしてから、「書式」→「セル」→「フォント」タブ→「下線」から「下線」を選ぶ→「OK」ボタン、と操作してみて下さい。 添付画像は、データの末尾にスペースが付いている物と、データの末尾にスペースが無い物が混在しているエクセルの画像です。 画像左側では、末尾にスペースが付いているセルがどれなのか、見ただけでは判りません。 画像右側のように「下線付き」にすると、末尾にスペースが付いているセルが一目瞭然です。 下線を付けると「見えないスペースにも下線が付く」ので「aaaa」「bbbb」「dddd」のセルで文字の右に下線が延びてて、末尾にスペースが付いていると判ります。「ccc」は下線が伸びてないので、末尾にスペースが無いのが判ります。 この問題を解決するには、以下の2つの方法があります。 ・余計なスペースを削りたい場合 TRIM関数を使って、末尾のスペースを取り除いたデータを生成し、生成したセルをコピーして「形式を指定して貼り付け→値のみ」で貼り付けて、末尾のスペースを取り除いた後、CSV出力する ・すべてスペース付きにして固定長にしたい場合 エクセルのファイルをテキストファイルに出力する際、CSV形式を選ばず、PRN形式を選んで「カンマ無しの固定長のテキストファイル」に出力する カンマ区切りでスペース無しの不定長のテキストファイルが欲しければ前者を、カンマ無しでスペース付きの固定長のテキストファイルが欲しければ後者の方法を使って下さい。

duoshaoqia
質問者

お礼

ご回答ありがとうございます。 下線でみてみるとたしかにスペースが入ってあるのを確認できました。 原因がわかり、よかったです。 どうもありがとうございました。

その他の回答 (1)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.1

>この例のキムラジロウの時のように、スペースの数が違って表示される理由がなぜなのかと、どのようにしたらこれを回避できるのか教えていただけませんか? 何故そのようになるかは各セルの文字列を点検してください。 表示状態を見ただけでは右側の空白文字が目視で確認できませんので全体の文字列長をLEN(文字列)で確認してください。 一般的には文字列データは右側の空白を付けない形で扱います。 空白を強制的に付加して同じ文字列長に調整するにはCSVファイルに出力前の処理が必要です。 A列に氏名が有るとき以下の式のようにすれば文字列長が一定になります。 =LEFT(A2&REPT(" ",20),20)

関連するQ&A