• ベストアンサー

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

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

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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

  • CSVファイルをExcelで開くとき

    CSVファイルをExcelで開くと、 12桁以上の数字が値として入っていた場合、 自動で対数表示されてしまいます。 現在、16桁の数字を扱っているのですが、 16桁を対数表示してしまうと、 1の位の数字が必ず0になってしまい、 元データの値を失ってしまいます。 CSVを開くときに、全セル文字列で開くことは出来ませんか?

  • CSVをExcelで開いた時の文字形式について

    いつもお世話になっています。 CSVをExcelで開いた時の文字形式について教えてください。 「aaa.csv」というファイルの中には以下のような文字列が記載されています。 --------------------------------- "2014/3","000123" --------------------------------- これをExcelで開くと、 --------------------------------- Mar-14, 123 --------------------------------- こうなってしまいます。 Excel上で、セルの書式設定を直せば正しく表示されるのは分かっているのですが、 CSVをExcelで開いたときに、自動で  ・年月を「2014/03」と表示、  ・数字の前0を落ちないように表示 させるにはどうしたらよいのでしょうか? よろしくお願いします。

  • CSVファイルもしくはExcelの使い方

    文字列と数字が書いてあるCSVファイルをExcelで開いて、数字の列だけ””(ダブルクォーテーション)で各セルの数字ごとに囲みたいのですが、一つ一つではなく、まとめて出来るようなやり方ってありますか? 最終的には、テキストで開いたときに、例のようになればいいのですが・・・ 例 ”200”,”1000”,ABC株式会社,”983000”, 営業,”351000”,事務,”200”

  • CSV→EXCELファイルで文字化けしてしまいます…。

    CSVファイルから、excelでファイルを読み込んだのですが、ある列のセル中だけが文字化けしてしまっていました。これを元に修正する方法はあるのでしょうか?(数字が日付になっていたり、英単語みたいな姿になつたりしています) ご存知の方、教えて下さい。 宜しくお願いいたします。

  • ExcelからCSV出力して読込むと削除変換される

      Excelのブック1のシートに入力されたデータを 一度、CSVファイルに出力して このCSVファイルを別のツール(perlなど)で変換して この変換されたCSVファイルを再び 別のExcelのブック2のシートに読み込ませたいのですが Excelのブック1から出力したCSVファイルを 別のツールで変換しなくてもそのまま Excelのブック2のシートに読み込ませた時点で 文字の一部が消えたり数式が値になったりしてしまっています。 具体的には、 セルの先頭の ' (シングルクォーテーション) が消えてしまったり、 1つ足りなくなったりしています。また、 先頭の =1+1 などは、(表示上) 2になったりしてしまっています。 なお、セルの書式設定が標準だと、先頭の @ の後に続けて入力すると 正しく入力できませんが、セルの書式設定を文字列にすると、 この @ の問題は起きなくなりました。でも、セルの書式設定を文字列にしても ' (シングルクォーテーション) や数式が計算結果になる問題は 解決していません。 (問1) 削除されたり変換されてしまうのは     ・先頭の ' (シングルクォーテーション)     ・先頭の =     ・先頭の @    の3つのケースだけでしょうか。    このほかにもありましたら教えてください。 (問2) 先頭の =1+1 の場合ですが    セルの書式設定が標準の状態で =1+1 と入力すると    数式バーには =1+1 と表示されていて    セルの書式設定が標準だと2と表示されていてその後    セルの書式設定を文字列にしても2と表示されています。    逆に、    セルの書式設定が文字列の状態で =1+1 と入力すると    数式バーには =1+1 と表示されていて    セルの書式設定が文字列だと =1+1 と表示されていてその後    セルの書式設定を標準にしても =1+1 と表示されています。    いずれも入力したデータは同じなのに    入力時点での表示形式で表示内容が固定されてしまっていて    その後、表示形式を変更しても表示内容が反映されていない    ように感じるのですが何が起きているのでしょうか。 (問3) 前述の理由により、CSVファイルをセルの書式設定が文字列    の状態で読み込ませることはできるのでしょうか。    (後でセルの書式設定を文字列に変更しても =1+1 と表示されないので) (問4) Excelのブック1のシートのセルには     ユーザーが好き勝手な文字や数値や記号を入力します。     何を入力されても変化してしまわないようにすることはできるでしょうか。      ( 頭に ' を付けることをユーザーに強要するとか、       事前にセルの頭に ' を入力しておくなどはなしです) (問5) もし、できない場合、Excelのブック1のシートの各セルの先頭に     ' (シングルクォーテーション) や = から始まる数式を    入力することができないように制限をかけることはできるのでしょうか。 よろしくお願いします。(Windows7,Excel2010)

  • 困っています!! ExcelをCSVファイルにしたあと。

    ご存知の方にとっては恥ずかしいくらいの質問かもしれませんが、どうか教えて下さい! win xp、Office2000を使用しています。 Excelでデータの編集が終わったあとに、ファイル形式をCSVで保存するよう言われ、入力後に「ファイルの名前を付けて保存」→ファイルの種類で「CSV」を選択して保存を致しました。 その際、ファイル名は「英小文字のみ.csv」にしています。 保存後、確認の為に再度そのファイルを開いたところ、 1、文字幅に合わせて大きさを変えた列幅が基準値に戻ってしまっている。 2、「文字列」を使用して、ゼロから始まる数字を打ち込んだ列がゼロを表示しない(01>1)、数字を全角で打ち込んでいるのに半角に戻ってしまう(15>15)。 という状態になってしまいます。 テキストエディタで確認したところ、きちんとカンマで区切られてはいるのですが、上記の2に関しては、半角になったままだったりと、入力した状態での表示ではありませんでした。 保存する際に、 「英小文字のみ.csv」はCSV(カンマ区切り)と互換性のない機能が含まれている可能性があります。 というメッセージが出ます。 Excelに関しては、まったくといっていいほど初心者です。苦手で逃げていた自分が悪いのですが…。 今回CSVというファイル形式も初めて知りました…。 NETで調べたりしてみたのですが、どうしてもわかりません。 CSVにしたあとに、通常1のようになってしまうものなのでしょうか? また、入力したままの状態が表示されるようにするには、どうしたらよいのでしょうか? ご存知の方がいらっしゃいましたら、ぜひお知恵を貸してください! よろしくお願い致します!

  • CSVもしくはExcelの使い方

    文字列と数字が書いてあるCSVファイルをExcelで開いて、数字の列だけ””(ダブルクォーテーション)で各セルの数字ごとに囲みたいのですが、一つ一つではなく、まとめて出来るようなやり方ってありますか? 最終的には、テキストで開いたときに、例のようになればいいのですが・・・ 例 ”200”,”1000”,ABC株式会社,”983000”, 営業,”351000”,事務,”200”

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

    (質問) EXCELをCSV形式で保存した時に、"0000199"という文字列(数字?)のままにしたい場合、どのようにマクロに記述をしたらよいでしょうか。 ActiveWorkbook.SaveAs FileFormat:=xlCSV (状況) EXCELのセルに"0000199"という文字列(数字?)がはいっています。 |0000199 | セルのイメージ (セルの左側に数字がよっているということは、文字列の形式でしょうか?) これを、CSV形式にして保存すると、先頭の0000がとれてしまい、次のようになってしまいます。 | 199| (セルの左側に数字がよっているということは、数字の形式でしょうか?) 以上 よろしくお願い致します。

  • CSVファイルの扱い

    教えてください。 CSVファイルをExcelで開く時の問題点です。CSVファイルの中に「00050」と言うような文字列が存在しています。ところがExcelでこれを開くと数値と認識してしまい、「50」と表示されてしまいます。これをExcelのセルのプロパティ等でセルの書式を文字列としても既にExcelにインポートされてしまったデータは「50」としか表示がされません。 「00050」として表示するための何か方法はないのでしょうか? みなさんよろしくお願いします。

  • エクセル2010 CSVレイアウト崩れ

    「よくある質問」とはちょっと違うと思います。 あるCSVファイルを、そのままダブルクリックするとエクセルで開いてくれるPCがあります。 そのようにして開くとレイアウト崩れはありません。 で、同じCSVファイルをエクセルの「データ」→「外部データの取り込み」→「テキストファイル」で読み込むと、レイアウトが崩れてしまうのはなぜでしょうか。 なぜこのような質問をするのかというと、ちょっと説明が難しいのですが、なるべく簡潔に箇条書きにしてみます。 1 まず、このCSVファイルは自社で使っているオリジナルのシステムがCSV形式で吐き出すファイルであるという事実 2 このファイルは、ところどころ長文があり、セル内で改行が必要。なので長文の部分はダブルクォーテーションで改行を含め全体を囲んである。 3 従来はCSVファイルをそのままダブルクリックして開いて、内容をチェックする時、担当者がエクセル上でセル幅や高さをマウスで調節して文章を読んでいた。なお、その際にレイアウト崩れは発生したことがないので、もともとのファイルのCSV形式はちゃんと整って吐き出されているものと思われる。 4 しかし、いちいち手動でそんなことをするのは大変だろうと、私がマクロでCSVファイルを読み取り、自動的にセル内の文章を全部表示できるサイズに各行や列を自動調節できるようにしたいと考えた。 5 具体的には、まずマクロを記録したエクセルファイルを開き、そこから次のシートに当該のCSVファイルを読み取らせればよかろうと考えた。 6 ところが、シートにCSVファイルを読み込ませるために冒頭のような読み込み作業を行ったら、同じエクセルの同じバージョン、同じPCなのにも関わらず、レイアウトに崩れが生じた。 7 具体的にどの部分でレイアウト崩れが起きているのかをテキストエディターで調べると、やはり長文内の改行部分で次のセルに移動してしまっている。 8 しかし、改行部はダブルクォーテーション内に収まっており、(そうでなかったらCSVファイルを直接ダブルクリックしてエクセルを開いた際にもレイアウト崩れが生じていたはず)自分でも訳がわからなくなる。 9 つまり、CSVファイルをテキストデータとして読み込んだ際、設定で「カンマでセル移動、ダブルクォーテーションを「文字列の引用符」に指定しているにも関わらず、エクセルがダブルクォーテーションを無視しているとしか考えられない 10 なぜこのような違いが同じエクセルで生じるのかがわからない 11 いろいろ調べると、「ひょっとして改行コードの解釈の問題(例のLF+CRの問題)か?もしくはダブルクォーテーションのコードの解釈の違いがあるのか??」と思い当たる。 …と、以上のような経緯があったわけです。 それにしても不可解な話なので、どなたかエクセルに詳しい方の解説がいただけたらなあ…と思うのですが、いかがでしょうか。 もしくはどこかに、「一発でCSVファイルを正しく読み込んでくれるモジュールがあるよ」的なアドバイスをいただけると非常に助かります。 よろしくお願いいたします。長文失礼いたしました。

専門家に質問してみよう