• ベストアンサー

ExcelでCSVファイルを読み込むとき

ExcelでCSVファイルを読み込むとき、0(ゼロ)で始まる数字の文字列を正しく読み込むためには、どうすればいいのでしょうか たとえば次のようなCSVファイルを読み込むと 先頭の0が省かれてしまいます。 01234,aaa[cr][lf] これがダメ 「1234」と表示されてしまう "01234",aaa[cr][lf] これもダメ 「1234」と表示されてしまう セルに「01234」と表示出来るようにするにはどうしたらいいのでしょうか?教えてください。お願いします。 ご存知の方、教えてください。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

下記をやって見ました。 0つき数字コード4桁列の先頭に「’」を付け加えた ファイルを作ってみました。 ABC3列でA列が0つき数字コード4桁とする。 先頭0は残るが’も残り、エンタを打ちこむと’が消える。 Private Sub Form_Click() Dim a(10) Open "c:\My Documents\a11.csv" For Input As #1 Open "c:\My Documents\a12.csv" For Output As #2 While Not EOF(1) Input #1, a(1), a(2), a(3) ' MsgBox a(1) & "," & a(2) & "," & a(3) Write #2, "'" & Mid("0000", 1, 4 - Len(a(1))) _ & a(1), a(2), a(3) Wend Close #1, #2 End Sub 興味があれば検討してください。

ykkw_2001
質問者

お礼

やってみました。 >先頭0は残るが’も残り、エンタを打ちこむと’が消える。 確かに・・・ サンプルプログラムまで教えていただき、ありがとうございました。 妥協線として、教えていただいた方法でやることにします。 保存しなおすと、次には先頭の"0"が消えてしまいますが・・・ #なんか、Excel嫌いになりそうです・・・ #好き勝手放題やるから・・・

その他の回答 (5)

  • dejiji-
  • ベストアンサー率38% (327/858)
回答No.6

CSVファイルはWIN上でファイルの関連付けが行われているため(エクセルと)エクセルで開くと、勝手な(全て標準状態で)設定がされます。 回避方法としては、関連付けを解除してしまうか、エクセル上からインポートして外部データとする方法があります。 関連付けの解除はやったことが無いのでいまいちですが、インポートは以下の手順で出来ます。 「データ」→「外部データの取り込み」→「テキストファイルのインポート」→「CSVファイルを選択」→「インポート」→テキストファイルウイザードが起動します。ここで、カンマ区切りを選択して次に進むと、上に「G/標準」のところをクリックして「文字列」を選択して完了で、5桁の数字は文字列として認識されます。 これは数値を文字として取り扱うため、計算など数値として取り扱いたい場合には、No1の方の言われているようにセルの書式を変更する方法が良いと思われますが。

ykkw_2001
質問者

お礼

ご回答ありがとうございます。 >勝手な(全て標準状態で)設定がされます。 勝手ですね、ホントに・・ 文字列データの場合、「01234」の全体がユーザーのデータなので、先頭の「0」を勝手に取ってしまっては、いけないですよね。(と思うんですが・・・) >数値を文字として取り扱う 実は、私の場合「01234」の部分は、IDコードなので、先頭の「0」にも意味のある文字列なのです。 >エクセル上からインポート この手順を設定などで、自動化できればうれしいのですが・・・ ありがとうございました。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

少し前に同様の質問に回答しました。ご参考に。 ExcelVBAを使ってテキストファイルを取り込む際に条件を与える方法 http://www.okweb.ne.jp/kotaeru.php3?q=427768

参考URL:
http://www.okweb.ne.jp/kotaeru.php3?q=427768
ykkw_2001
質問者

お礼

ご回答ありがとうございます。 ExcelVBAとは事情が違いますが、紹介いただいたURLは参考になりました。 ありがとうございました

  • earh8
  • ベストアンサー率30% (3/10)
回答No.3

プログラムで出力しているとのことなら、その際に0の前に「’(半角アポストロフィ)」を付けてCSV出力をするとかはですかね。 しかしこの方法でも操作人がその後CSV形式で保存しなおしたら0が消えてしまうだったような?(大丈夫でしたらすみません) それか、もともと拡張子をCSV以外にして必ずウィザードを使用するようにするか ですかね。 どちらにせよその後の操作人の使い方次第にはなってしまうかとは思うのですが 回答にはなっていませんがアドバイスということで。

ykkw_2001
質問者

お礼

"'01234","aaa" で、うまくいきました。 といっても、初期表示は「'01234」だし、 おっしゃるように >CSV形式で保存しなおしたら0が消えてしまう というなんとも悲しい状況です。 私のやりたいことはそれほど不自然なこととは思ってないのですが、M$さんのSEにとっては、「違う」のでしょうね。 ありがとうございました。

  • hi-rachel
  • ベストアンサー率33% (21/63)
回答No.2

消極的な方法ですが, (1)CSVのデータで該当箇所の0の前に適当な(他の部分で使用しない)文字を入れておきます。   例)01234 => P01234  (半角でも全角でも大丈夫だと思います) (2)EXCELで開く。 (3)(1)で入力した文字を半角の’(アポストロフィー [Shift]+[7])に置換する。

ykkw_2001
質問者

お礼

ご回答ありがとうございます。 >[Shift]+[7])に置換する。 なるべくなら、一発で(自動的に)出来るようにしたかったんですが・・・ 質問に書いてなかったので、舌足らずでした。 ありがとうございました。

回答No.1

数値として扱うけど5桁で頭を0で埋めたいのなら、表示形式を"00000"とする。 文字列として扱いたいなら、ファイル名の末尾を.csvから.txtに変更し、読み込み ウィザードで該当するカラムを文字列に指定する。 こんな感じですね。エクセルはcsvファイルのうちファイル名の末尾が.csvであるも のに対して、ウィザードを起動せず身勝手な解釈で余計なお世話をしてくれる仕様な ので注意が必要です。

ykkw_2001
質問者

お礼

早速ご回答ありがとうございます あるプログラムで出力したファイルをExcelで利用する(こともある)という状況なので、Excelでの操作は使う人が一回一回やらなくちゃいけないんですね。(;_;) CSVって、他のアプリケーションでも読み込めるのでいいかなと思ってました。(他のアプリでは、ダブルクォートで囲むと文字列という判断をするようで0は省かれません) >勝手な解釈で余計なお世話をしてくれる仕様なので注意が必要です。 そうでしたか・・・・ なんか、がっくりきました・・・ ありがとうございました。

関連するQ&A