- ベストアンサー
CSVファイルをExcelで開くとき
CSVファイルをExcelで開くと、 12桁以上の数字が値として入っていた場合、 自動で対数表示されてしまいます。 現在、16桁の数字を扱っているのですが、 16桁を対数表示してしまうと、 1の位の数字が必ず0になってしまい、 元データの値を失ってしまいます。 CSVを開くときに、全セル文字列で開くことは出来ませんか?
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 話の流れからするとマクロの利用が可能かどうかは微妙なところですが、下記のコードでご希望の動作は可能です。 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
その他の回答 (8)
- 9013yagi
- ベストアンサー率39% (15/38)
もし、ACCESSをお持ちなら、16桁を超える数値が入る部分をテキストとしてテーブルを取り込んで、そのままの形でExcelへ吐き出すといったマクロを作成してみればどうですか? 起動時にマクロを実行させて、吐き出した後に自動でACCESSを終了させれば、作業をされる方にとっては、Wクリック一回分の手間が増えただけですみますよ。 上記の作業は別にプログラムを書かなくても可能ですし、意外と簡単に出来るのでどうでしょう。全くACCESSを触ったことが無ければ、少し難しいかもしれませんが。
お礼
どうもありがとうございました。 Accessでそんなことまで出来るんですね。 わざわざVBで実行ファイル作ってしまいました・・・
- vantage
- ベストアンサー率60% (310/514)
カテゴリから外れてしまいますけど、 どうしてもExcelでなければダメでしょうか? 私も、スキルがまちまちな第三者のユーザにCSVファイルを扱ってもらわなければならないということがありまして、そのときの結論としましては「フリーのCSVエディタを使用していただく」というのがベストでした。 結構Excel風にできていますので、ユーザさんにとっても違和感なく操作できるようでした。 選択肢の一つとしてお考え下さい。
補足
ありがとうございます。 ただ、やはりExcelでないとダメなんです。 納品の形式がExcel指定なので・・・
- kmb01
- ベストアンサー率45% (63/138)
そもそもExcelは15桁までしか扱えなかったはずです。
補足
そのようですね。 はじめからセルの書式を数値にしてやっても、 数字を16個以上入れると0表示になってしまうみたいです。 文字列なら16桁でも問題なく表示できるので、 簡単に文字列に変換できるといいのですが・・・
#1 すみませんでません。旧バージョンです 「データ」-「外部データの取り込み」-「データの取り込み」で取り込むとでます
補足
この方法も素人には難しい気がします。 しかも、やっかいなことにこのCSVデータには不要な改行コードが含まれているせいで、この方法だとうまく表示されません。
あいまいな記憶で申し訳ないのですが、開く対象のcsvファイルの拡張子がcsvだとExcelはウィザードを使用しないで勝手に開いてしまったと思います。 可能でしたらファイルの拡張子をtxtなどにしてやるとウィザードが動くと思います。 もしかしたらそこで書式を設定できるかも知れません。 間違っていたらごめんなさい。 それで出来ない場合は、#3さんの回答にあるとおり、開いた後で書式設定したほうがいいと思います。
補足
確かに拡張子変更でTXTデータにしてから、 Excelで開くと書式設定が出来ました。 しかし、操作を行うのはPCの素人で、 全角と半角を間違えてしまうくらいの レベルです。 もっと簡単な方法はないでしょうか・・・
- Samurai-Jack
- ベストアンサー率18% (130/697)
Excelを開いたあと、セルを全選択し、右クリックで「セルの書式設定」「表示形式」タブで「数値」を選択したらちゃんと表示できないでしょうか?
補足
一度対数変換されてしまってから数値に戻しても、 1の位は0のままのようです。
- e30653
- ベストアンサー率28% (32/114)
こんにちは。 CSVファイルをダブルクリックして開くのではなく、エクセルの[ファイル]-[開く]からCSVファイルを開きます。 そうすると、テキストファイルウィザードが表示されます。 このウィザードの3ページ目(3/3)で、列のデータ形式を設定することができます。 試してみてください。
補足
Excelから開いてもウィザードは出ないです。 やり方は合ってると思うんですが・・・ Excel2002
エクセルからcsvを開いてください。 ダイアログにしたがって文字列指定してください
補足
ExcelからCSVを開くときにダイアログは出ないのですが・・・
お礼
ありがとうございます。 回答が届いている事に気付かずに一人迷走していました。 一応下記のコードで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