• ベストアンサー

ExcelVBA CSV読込書き込み

ExcelVBAです。Excelバージョンは2003,2007です。 CSVファイルを読み込み、書き換えて、別のファイル名で保存します。 一通りできるのですが、次の場合どの様にしたら良いでしょうか? CSVのデータ項目が、20桁ほどの数値、住所などの文字列、5桁ほどの数値となっています。 20桁ほどの数値は文字列扱いにしたいのですが、Excelでは指数表示になってしまいます。 そのままCSVとして保存すると指数で保存されてしまいます。 これを文字列として表示し、CSV保存でも文字列として保存したいのです。 よろしくお願いします。

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

CSVファイルのフォーマットが 列数や各列のデータ型が固定であればVBAで作って・・という気にはなりますが 不定の場合なら、データ→外部ファイルのインポートからCSVファイルを選択し ウィザードに従って、20桁の数字を文字列として取り込めば・・と思います。 VBAの場合、ファイルが3列の時には Sub インポート() Const inCSV As String = "e:\test.csv" 'test.csv は、12345678901,aa,1234 のような感じ Dim ff As Integer Dim StrLine As String Dim i As Integer Sheets(1).Columns("A:A").NumberFormatLocal = "@" ff = FreeFile Open inCSV For Input As #ff Do Until EOF(ff) Line Input #ff, StrLine Range("A1:C1").Offset(i, 0) = Split(StrLine, ",") i = i + 1 Loop End Sub なお保存時に、仮に 12345678901,aa,1234 が "12345678901",aa,1234 のようでもあっても、 Excelは数値と判断できれば一律に数値として扱ってしまうので CSVファイルをダブルクリックで開く時に、このお節介機能を止めるすべは無いかと? ※なにかしら列の先頭に(タブコードとか?を)入れて置けば出来そうですが これはこれで後々はまりそうなので、どうかな?と思います。

Hirorin_20
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • oldperson
  • ベストアンサー率25% (4/16)
回答No.2

以下のような文字列をCSVファイルに書き込んでください。 ="12345678901234567890",住所,12345

Hirorin_20
質問者

お礼

ありがとうございました。

関連するQ&A