教えて下さい。

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

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

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

よろしくお願いします。

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcelで作成した表の数値がcsvで保存すると指数表示になる

エクセルで16桁(12345678・・・)の数値入力した表(表示形式は文字列に設定)をCSVで保存すると、指数表示(8.86E+15)になりました。CSVで16桁の数値を表示するにはどうすれば良いですか?又いくつものセルの表示を同時に直す事は出来ますか?よろしくお願い致します。
OSはWinNT Officexp Personalです。

Aベストアンサー

指数表示のままで保管すると表示のままになります。

>>いくつものセルの表示を同時に直す事は出来ますか
数値が入っているセル(列又は行全体でも可)を選択して
ツールバーにある「,」のアイコンをクリックすれば16桁表示されます。
カンマが不要なら、セルの書式設定→表示形式→ユーザー定義
から「0」を選択して下さい。

QExcelで指数表現しないようにする方法

こんにちは。
csvファイルに 10E098 という文字列がある場合、
このファイルをダブルクリックしてExcelで表示すると
1.00E+99 のように指数形式で表示されてしまいます。
(セルのプロパティも「指数」になっています)
そのまま 10E098 という文字列で表示するようにしたいのですが
どのようにすればよいのでしょうか?
ちなみに、該当のセルの表示形式を「標準」にしても「文字列」に
しても 1E+99 と表示されてしまって出来ませんでした。
よろしくお願いいたします。

Aベストアンサー

CSVファイルを読み込むときに普通に読み込むと数値を見なして1E+99になりますので、文字列として読み込んだらいかがですか

「データ」→「区切り位置」を選択し「カンマやタブなどの…」を選択する。ウィザード2/3画面で区切り文字「カンマ」にチェックを入れ、3/3画面でその数値のある列を「文字列」にします

この文字列を数値にするなら以下のような式で可能です
=VALUE(LEFT(A1,FIND("E",A1)-1))*10^VALUE(RIGHT(A1,LEN(A1)-FIND("E",A1)))

QCSVで保存するとセルの書式が継続しません。

(質問)
EXCELをCSV形式で保存した時に、"0000199"という文字列(数字?)のままにしたい場合、どのようにマクロに記述をしたらよいでしょうか。

ActiveWorkbook.SaveAs FileFormat:=xlCSV

(状況)
EXCELのセルに"0000199"という文字列(数字?)がはいっています。
|0000199| セルのイメージ
(セルの左側に数字がよっているということは、文字列の形式でしょうか?)

これを、CSV形式にして保存すると、先頭の0000がとれてしまい、次のようになってしまいます。
| 199|
(セルの左側に数字がよっているということは、数字の形式でしょうか?)


以上 よろしくお願い致します。

Aベストアンサー

> セルの左側に数字がよっているということは、文字列の形式でしょうか?

文字列の形式にしないと先頭に0はつけられません。

> これを、CSV形式にして保存すると、先頭の0000がとれてしまい、次のようになってしまいます。

CSVにしたからとれるのではなく、CSVファイルをエクセルで開くから、その瞬間にとれるのです。ためしに拡張子を.txtにかえてメモ帳で開いてみてください。


人気Q&Aランキング

おすすめ情報