• ベストアンサー

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

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

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.8

こんにちは。 話の流れからするとマクロの利用が可能かどうかは微妙なところですが、下記のコードでご希望の動作は可能です。 1.マクロ[OpenCSV]を実行 2.CSVを開くためのダイアログが表示されます 3.ファイルを選択し、OKをクリック 4.新しいブックが作成され、データを読み込みます 新規ブック上にCSVファイルのデータを読み込むため、元のCSVファイルを直接編集できるわけではありません。 この点については、マクロを改造すれば可能かと思いますが。ご参考までに。 Sub OpenCSV()   Dim strTarget As String   Dim n As Long, i As Long   Dim tmp As String, buf As Variant   Dim WB As Workbook   On Error GoTo ExitHandler   'CSVファイルの指定   strTarget = Application.GetOpenFilename(FileFilter:="CSVファイル,*.csv")   '新規ブックの作成   Set WB = Workbooks.Add   '読込み処理   Application.ScreenUpdating = False   n = FreeFile   Open strTarget For Input As #n   i = 1   Do Until EOF(n)     Line Input #n, tmp     buf = Split(tmp, ",") 'Split関数はExcel2000以上のみ     WB.Sheets("Sheet1").Range(Cells(i, 1), Cells(i, UBound(buf) + 1)) = buf     If i = 65536 Then       MsgBox "65536行以上のデータは読み込めません。中止します。", vbCritical       GoTo ExitHandler     End If     i = i + 1   Loop ExitHandler:   Close #n   Set WB = Nothing   Application.ScreenUpdating = True End Sub

freednia
質問者

お礼

ありがとうございます。 回答が届いている事に気付かずに一人迷走していました。 一応下記のコードでVBの実行ファイルを作ってみました。 KenKen_SPさんの方がスマートでしたね・・・ Private Sub Command1_Click() On Error GoTo Err Dim filename As String Dim filename_new As String Dim rec As String CommonDialog1.CancelError = True CommonDialog1.DialogTitle = "変換するファイルの選択" CommonDialog1.Filter = "CSVファイル|*.CSV" CommonDialog1.ShowOpen filename = CommonDialog1.filename filename_new = Left(filename, Len(filename) - 4) & "(データ変換済).csv" Open filename For Input As #1 Open filename_new For Output As #2 Do Until EOF(1) Line Input #1, rec rec = Replace(rec, """,""", """,""'") Print #2, rec Loop Close #2 Close #1 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(filename_new) Set xlSheet = xlBook.Worksheets(1) xlApp.Visible = True xlApp.Application.DisplayAlerts = False Dim x, y x = 1 Do xlSheet.Range(xlSheet.Cells(x, 1), xlSheet.Cells(x, 200)).NumberFormat = "@" For y = 1 To 200 If Left(xlSheet.Cells(x, y), 1) = "'" Then If Len(xlSheet.Cells(x, y)) = 1 Then xlSheet.Cells(x, y) = "" Else xlSheet.Cells(x, y) = Right(xlSheet.Cells(x, y), Len(xlSheet.Cells(x, y)) - 1) End If End If Next x = x + 1 Loop Until xlSheet.Cells(x, 1) = "" xlApp.ActiveWorkbook.SaveAs filename:= Left(filename, Len(filename) - 4) & "(データ変換済).xls", FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing Kill filename_new End xlApp.Application.DisplayAlerts = True Exit Sub Err: End Sub

その他の回答 (8)

  • 9013yagi
  • ベストアンサー率39% (15/38)
回答No.9

 もし、ACCESSをお持ちなら、16桁を超える数値が入る部分をテキストとしてテーブルを取り込んで、そのままの形でExcelへ吐き出すといったマクロを作成してみればどうですか?  起動時にマクロを実行させて、吐き出した後に自動でACCESSを終了させれば、作業をされる方にとっては、Wクリック一回分の手間が増えただけですみますよ。 上記の作業は別にプログラムを書かなくても可能ですし、意外と簡単に出来るのでどうでしょう。全くACCESSを触ったことが無ければ、少し難しいかもしれませんが。

freednia
質問者

お礼

どうもありがとうございました。 Accessでそんなことまで出来るんですね。 わざわざVBで実行ファイル作ってしまいました・・・

  • vantage
  • ベストアンサー率60% (310/514)
回答No.7

カテゴリから外れてしまいますけど、 どうしてもExcelでなければダメでしょうか? 私も、スキルがまちまちな第三者のユーザにCSVファイルを扱ってもらわなければならないということがありまして、そのときの結論としましては「フリーのCSVエディタを使用していただく」というのがベストでした。 結構Excel風にできていますので、ユーザさんにとっても違和感なく操作できるようでした。 選択肢の一つとしてお考え下さい。

参考URL:
http://www.asukaze.net/soft/cassava/index.html
freednia
質問者

補足

ありがとうございます。 ただ、やはりExcelでないとダメなんです。 納品の形式がExcel指定なので・・・

  • kmb01
  • ベストアンサー率45% (63/138)
回答No.6

そもそもExcelは15桁までしか扱えなかったはずです。

freednia
質問者

補足

そのようですね。 はじめからセルの書式を数値にしてやっても、 数字を16個以上入れると0表示になってしまうみたいです。 文字列なら16桁でも問題なく表示できるので、 簡単に文字列に変換できるといいのですが・・・

noname#8445
noname#8445
回答No.5

#1 すみませんでません。旧バージョンです 「データ」-「外部データの取り込み」-「データの取り込み」で取り込むとでます

freednia
質問者

補足

この方法も素人には難しい気がします。 しかも、やっかいなことにこのCSVデータには不要な改行コードが含まれているせいで、この方法だとうまく表示されません。

noname#86752
noname#86752
回答No.4

あいまいな記憶で申し訳ないのですが、開く対象のcsvファイルの拡張子がcsvだとExcelはウィザードを使用しないで勝手に開いてしまったと思います。 可能でしたらファイルの拡張子をtxtなどにしてやるとウィザードが動くと思います。 もしかしたらそこで書式を設定できるかも知れません。 間違っていたらごめんなさい。 それで出来ない場合は、#3さんの回答にあるとおり、開いた後で書式設定したほうがいいと思います。

freednia
質問者

補足

確かに拡張子変更でTXTデータにしてから、 Excelで開くと書式設定が出来ました。 しかし、操作を行うのはPCの素人で、 全角と半角を間違えてしまうくらいの レベルです。 もっと簡単な方法はないでしょうか・・・

回答No.3

Excelを開いたあと、セルを全選択し、右クリックで「セルの書式設定」「表示形式」タブで「数値」を選択したらちゃんと表示できないでしょうか?

freednia
質問者

補足

一度対数変換されてしまってから数値に戻しても、 1の位は0のままのようです。

  • e30653
  • ベストアンサー率28% (32/114)
回答No.2

こんにちは。 CSVファイルをダブルクリックして開くのではなく、エクセルの[ファイル]-[開く]からCSVファイルを開きます。 そうすると、テキストファイルウィザードが表示されます。 このウィザードの3ページ目(3/3)で、列のデータ形式を設定することができます。 試してみてください。

freednia
質問者

補足

Excelから開いてもウィザードは出ないです。 やり方は合ってると思うんですが・・・ Excel2002

noname#8445
noname#8445
回答No.1

エクセルからcsvを開いてください。 ダイアログにしたがって文字列指定してください

freednia
質問者

補足

ExcelからCSVを開くときにダイアログは出ないのですが・・・

関連するQ&A