• ベストアンサー

CSVデータの数値の表示

教えて下さい。 他プログラムからCSVデータ出力したデータを エクセルで表示すると、13桁の数字が9E+12と表示されて しまいます。 セルの書式設定を「数値」に変更すると一時的に数字が表示されるのですが、一度保存して、再度ファイルを開くと戻ってしまいます。 エクセル形式で保存すれば大丈夫なのですが、どうしてもCSVファイルのままで保存したいのです。 CSVデータで13桁の数字を常に表示する方法を教えて下さい。 よろしくお願いします。

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

  • ベストアンサー
  • noah7150
  • ベストアンサー率46% (116/251)
回答No.2

CSVファイルはデータだけでCell書式等の情報はまったく持ちませんから Excelの仕様ですので無理ですね。 あとはマクロでも作成して読み込み後に書式変更するしかないです。 それとExcelでCSVを読み込むとき全桁数字項目は自動的に数値と判断するため コード項目等で前にゼロある場合、数値表示されて前ゼロが消えますから注意が必要です 私の場合は列単位で書式を設定した雛形を作成しておいてマクロにて展開しています 但しデータ量が多いと1Cell単位でセットすると遅いので配列に取り込み一括セットしてます。 Dim wDat(3, 2) 'データの読み込み処理 : : '一括セット Range(Cells(1, 1), Cells(4, 3)) = wDat 分解にはSplit関数を使ってます。

gift4y
質問者

お礼

ありがとうございます。 内容が高度すぎてイマイチ理解出来てませんが、 エクセル仕様なのはわかりました。 違うアプローチを考えます。 ありがとうございました。

その他の回答 (3)

回答No.4

素人な私ですが、自分のスキルupのために考え作成してみました。 私の勘違いでしたら申し訳ありません。それでは まず13桁の数値が入力されているCSVファイルをExcelで読み込むと 指数表示になって困る。これは下記の投稿の回答から察するとデータ の修正等を行うことから「見づらい」や「扱いづらい」理由からと 推測しました。一応確認してみたのですが、Exselで13桁の数値が 入力されているファイルを開いて指数表示になったものをそのまま 保存すると13桁の数字で保存されずに、指数表示のまま保存され ました。この場合他のプログラムで指数表示の数値を受けつけずに エラーになる危険性もあるなと思いました。ということをふまえて 素直にgift4yさんの作業が楽になるマクロを考えてみました。 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 13桁の数値が入力されているCSVを読み込んだときに指数表示 なってしまったすべてのセルの値を数値表示に変換するマクロ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ これで良いのではないでしょうか?ということで書きのソースが それです。すごく単純なマクロです。 Sub Macro1() '---ファイル名を取得するためのメソッド------------------ F_name = Application.GetOpenFilename _ (Filefilter:="csvファイル(*.csv), *.csv") '------------------------------------------------------- Workbooks.Open Filename:=F_name 'ファイルのオープン Cells.Select Selection.NumberFormatLocal = "0_ " End Sub

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.3

私の方の勘違いならすいませんが、他の回答者さんと違う視点で。 >また、拡張子はあくまでcsvにこだわりたいのです。 >そのデータを最終的には他プログラムに取り込みたいので。 もしかして、ここを勘違いされているのかと思い、回答した次第です。 CSVは単なるテキストファイルですから、書式のセットはできない、もしくは、Excelで開いた時に表示されるように出力側で制御する必要がある事は、#1さん、#2さんの回答通りです。 しかし、繰り返しになりますが、CSVそのものはテキストファイルですから、出力時に 1234567890123 と出力したのであれば、Excelで開けば「1.23E+12」のような指数表示になったとしても、CSVをメモ帳やテキストエディタで開けば、 1234567890123 のまま、となっているはずです。 つまり、他のプログラムに引き渡す分には、そのままで何の問題もないのです。 (むしろ、「'」を付ける事で取り込み側のプログラムが不具合を起こす可能性もある) 「それはわかっている」と言う事でしたら、#1さん、#2さん、以外の最適解は無い、と言う事になりますね。

gift4y
質問者

お礼

データの吐き出しと取り込みの間に、エクセルでデータを修正という作業をする必要があるのです。 違うアプローチを考えてみます。 ありがとうございました。

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

数値(標準)のままでは無理 文字列として扱うしかないです 数字の前にアポストロフィー 「 ' 」 を付けましょう(例 '1234567890123) これで明示的に文字列とすることができます あるいは、CSVファイルを開くのではなく CSVファイルを参照するExcelファイルを作ることをお奨めします

gift4y
質問者

お礼

ありがとうございます。 違うアプローチを考えてみますね。

gift4y
質問者

補足

早速の回答ありがとうございます。 すいません、質問が不十分でした。 13桁の数字は、1シートの何千件とあるんです。 その数字にアポストロフィーをつけるのはちょっと厳しいです。 また、拡張子はあくまでcsvにこだわりたいのです。 そのデータを最終的には他プログラムに取り込みたいので。

関連するQ&A

専門家に質問してみよう