プロが教えるわが家の防犯対策術!

教えて下さい。

他プログラムからCSVデータ出力したデータを
エクセルで表示すると、13桁の数字が9E+12と表示されて
しまいます。
セルの書式設定を「数値」に変更すると一時的に数字が表示されるのですが、一度保存して、再度ファイルを開くと戻ってしまいます。

エクセル形式で保存すれば大丈夫なのですが、どうしてもCSVファイルのままで保存したいのです。

CSVデータで13桁の数字を常に表示する方法を教えて下さい。

よろしくお願いします。

A 回答 (4件)

CSVファイルはデータだけでCell書式等の情報はまったく持ちませんから


Excelの仕様ですので無理ですね。

あとはマクロでも作成して読み込み後に書式変更するしかないです。

それとExcelでCSVを読み込むとき全桁数字項目は自動的に数値と判断するため
コード項目等で前にゼロある場合、数値表示されて前ゼロが消えますから注意が必要です

私の場合は列単位で書式を設定した雛形を作成しておいてマクロにて展開しています
但しデータ量が多いと1Cell単位でセットすると遅いので配列に取り込み一括セットしてます。

Dim wDat(3, 2)

'データの読み込み処理
:
:
'一括セット
Range(Cells(1, 1), Cells(4, 3)) = wDat

分解にはSplit関数を使ってます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/15 11:59

素人な私ですが、自分のスキル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
    • good
    • 0

私の方の勘違いならすいませんが、他の回答者さんと違う視点で。



>また、拡張子はあくまでcsvにこだわりたいのです。
>そのデータを最終的には他プログラムに取り込みたいので。

もしかして、ここを勘違いされているのかと思い、回答した次第です。
CSVは単なるテキストファイルですから、書式のセットはできない、もしくは、Excelで開いた時に表示されるように出力側で制御する必要がある事は、#1さん、#2さんの回答通りです。

しかし、繰り返しになりますが、CSVそのものはテキストファイルですから、出力時に
1234567890123
と出力したのであれば、Excelで開けば「1.23E+12」のような指数表示になったとしても、CSVをメモ帳やテキストエディタで開けば、
1234567890123
のまま、となっているはずです。

つまり、他のプログラムに引き渡す分には、そのままで何の問題もないのです。
(むしろ、「'」を付ける事で取り込み側のプログラムが不具合を起こす可能性もある)

「それはわかっている」と言う事でしたら、#1さん、#2さん、以外の最適解は無い、と言う事になりますね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/15 11:58

数値(標準)のままでは無理


文字列として扱うしかないです
数字の前にアポストロフィー 「 ' 」 を付けましょう(例 '1234567890123)
これで明示的に文字列とすることができます

あるいは、CSVファイルを開くのではなく
CSVファイルを参照するExcelファイルを作ることをお奨めします

この回答への補足

早速の回答ありがとうございます。

すいません、質問が不十分でした。

13桁の数字は、1シートの何千件とあるんです。
その数字にアポストロフィーをつけるのはちょっと厳しいです。

また、拡張子はあくまでcsvにこだわりたいのです。
そのデータを最終的には他プログラムに取り込みたいので。

補足日時:2009/05/14 15:23
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/15 12:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!