- ベストアンサー
Access2010でExcelエクスポート
通貨型のフィールドに、「\535,211,114,112」を入力して、 DoCmd.TransferSpreadsheet acExport, 5, "テーブル1", "C:\Test.xls", True, "" を行うと、Excelに「450691311687.48」が出力されます。 ※Excelのバージョンは2010です。 この事象について、詳しい方がおられましたら、ご教授ください。 以上、よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こちらでも再現してしまいました。 WinXP SP3 & Office2010(試用版) 倍精度浮動小数点型なら誤変換?は発生せず。 時間が取れないので通貨型の誤変換のしきい値?は探していません。 Office2002では発生せず。 MougさんとかだとDEEPな方々が多いのと、 此処のようにスレッドが流され放しにならないので、おススメかもです。 http://www.moug.net/index.html
その他の回答 (2)
- piroin654
- ベストアンサー率75% (692/917)
No1です。この現象については以下にあります。 http://support.microsoft.com/kb/417633/ja http://www.nbcom.co.jp/PC-Support/FAQ/acc/tr/acc102004tr002.shtml ただ、上記の方法で訂正されなければ、No1の方法で。
お礼
piroin654様 お忙しい中、返答下さり、ありがとうございました。 今回は、書式ではなく、予期せぬ値で出力されてしまう事象に困っておりました。 書式については、新たな知識として蓄えさせて頂きます。
- piroin654
- ベストアンサー率75% (692/917)
エクスポートした後、Excelのセルの書式設定で 小数点以下の桁数を0にすれば表示が訂正されます。
お礼
piroin654様 お忙しい中、返答下さり、ありがとうございました。 今回は、書式ではなく、予期せぬ値で出力されてしまう事象に困っておりました。 書式については、新たな知識として蓄えさせて頂きます。
お礼
nicotinism様 お忙しい中、返答下さり、ありがとうございました。 私だけかと思い、不安になっておりました。 フィールドの型を十進型にする手もあったのですが、デグレートテストが膨大になるので、エクスポートクラスを作成して対処するつもりです。 ざくっと流した結果、期待通りの値が出力されてましたので、来週はこのクラスのテストをして、対応するつもりです。 本当にありがとうございました。 以下、ExportClass Option Compare Database Private xlsApl As Excel.Application Private xlsBook As Excel.Workbook Private xlsSheet As Excel.Worksheet Private Sub Class_Initialize() Set xlsApl = CreateObject("Excel.Application") xlsApl.DisplayAlerts = False End Sub Private Sub Class_Terminate() xlsApl.Quit Set xlsApl = Nothing End Sub Public Sub OpenBook(xlsPath As String) Set xlsBook = xlsApl.Workbooks.Open(xlsPath) End Sub Public Sub Export(queryName As String, Optional sheetName As String = "") Dim rs As Recordset Dim i As Integer If sheetName = "" Then sheetName = queryName End If Set rs = CurrentDb.OpenRecordset(queryName, dbOpenSnapshot) For i = 1 To xlsBook.Sheets.Count If xlsBook.Sheets(i).Name = sheetName Then xlsBook.Sheets(sheetName).Delete Exit For End If Next i Set xlsSheet = xlsBook.Sheets.Add For i = 0 To rs.Fields.Count - 1 xlsSheet.Cells(1, i + 1).Value = rs.Fields(i).Name Next xlsSheet.name = sheetName xlsSheet.Cells(2, 1).CopyFromRecordset rs rs.Close Set rs = Nothing Set xlsSheet = Nothing End Sub Public Sub CloseBook() xlsBook.Save xlsBook.Close Set xlsBook = Nothing End Sub