• ベストアンサー

Access2010でExcelエクスポート

通貨型のフィールドに、「\535,211,114,112」を入力して、 DoCmd.TransferSpreadsheet acExport, 5, "テーブル1", "C:\Test.xls", True, "" を行うと、Excelに「450691311687.48」が出力されます。 ※Excelのバージョンは2010です。 この事象について、詳しい方がおられましたら、ご教授ください。 以上、よろしくお願い致します。

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

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

こちらでも再現してしまいました。 WinXP SP3 & Office2010(試用版) 倍精度浮動小数点型なら誤変換?は発生せず。 時間が取れないので通貨型の誤変換のしきい値?は探していません。 Office2002では発生せず。 MougさんとかだとDEEPな方々が多いのと、 此処のようにスレッドが流され放しにならないので、おススメかもです。 http://www.moug.net/index.html

micoyanx
質問者

お礼

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

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

No1です。この現象については以下にあります。 http://support.microsoft.com/kb/417633/ja http://www.nbcom.co.jp/PC-Support/FAQ/acc/tr/acc102004tr002.shtml ただ、上記の方法で訂正されなければ、No1の方法で。

micoyanx
質問者

お礼

piroin654様 お忙しい中、返答下さり、ありがとうございました。 今回は、書式ではなく、予期せぬ値で出力されてしまう事象に困っておりました。 書式については、新たな知識として蓄えさせて頂きます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

エクスポートした後、Excelのセルの書式設定で 小数点以下の桁数を0にすれば表示が訂正されます。

micoyanx
質問者

お礼

piroin654様 お忙しい中、返答下さり、ありがとうございました。 今回は、書式ではなく、予期せぬ値で出力されてしまう事象に困っておりました。 書式については、新たな知識として蓄えさせて頂きます。

関連するQ&A

  • アクセス2000→エクセル2010へエクスポート

    Private Sub cmd出力ボタン_Click() DoCmd.SetWarnings False DoCmd.TransferSpreadsheet acExport, 8, "出力クエリ", "C:データ.xlsx", True, "" DoCmd.SetWarnings True End Sub 実行すると 外部テーブルのフォーマットが正しくありません と出てしまいます。 エクセル97の形式にエクスポートする際は大丈夫でした。 spreadsheettypeの引数が違うのかとは思いますが適切な数値がわかりません。 他のやり方等もあれば教えて下さい。

  • ACCESS エクスポートしたEXCELが立ち上がらない

    知っている方が居たら教えてください。 DoCmd.TransferSpreadsheet acExport, , QInfo, FileName, True ↑でEXCELにエクスポートしています。 エクスポート処理時に何かEXCELファイルを立ち上げておくと エクスポートしたファイルを自動起動できません。 EXCEL本体、EXCELを起動しない場合は自動起動できるのですが・・・。 そういうものなのでしょうか?

  • ACCESS-VBAでEXCEL出力

    ACCESS-VBAで外部accdb内のテーブルデータをEXCEL出力するにはどうしたらできるのでしょうか? 現在、以下の方法で内部のテーブルデータをEXCEL内の名前に紐づけてエクスポートしています。 DoCmd.TransferSpreadsheet acExport, , "データ", "test.xlsx", True

  • Access2000のモジュールで

    テーブル1にある処理をした後、そのテーブルを開いて内容を確認し、OKならエクセルにエクセルにエクスポートという処理を記述したいのですが、   ・   ・ DoCmd.OpenTable "テーブル1" If MsgBox("出力してよろしいですか。", vbYesNo, "確認") = vbYes Then DoCmd.TransferSpreadsheet acExport, , "テーブル1", "C\テーブル1.xls", True とすると、テーブルを開いてすぐにメッセージボックスが手前に表示されるので、テーブルをスクロールすることができません。 Docmd・・・とif MsgBoxの間にどんな記述を入れれば、できるようになりますか? それとも、もっとスマートなやり方があるのでしょうか? 教えてください。お願いします。

  • Access2000 Export時にシート名を指定したい。

    お世話になります。 Access2000です。 アクセスよりテーブルAをエクセルにエクスポートする時にシート名を指定したいのですがどうすればよいのですか? DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "テーブルA", "E:\", True となっていますが・・・・ よろしくお願いします。

  • accessからエクセルにエクスポートしたファイルを開きたい。

    accessのマクロ・ワークシート変換で4枚のシートを含むエクセルファイルを作るように設定をしたのですが、これをエクスポートが終わったら自動的に開くようにしたいのですが、どのようにしたらよいでしょうか。 VBAで DoCmd.OutputTo acOutputTable, "tbl_aaa", acFormatXLS, , True と試してみましたが、シートは一つのみになってしまいます。 1つのエクセルファイルに4枚のシートを出力して、それを立ち上がるようにしたいです。 DoCmd.TransferSpreadsheet acExport, … も考えたのですが、エクセルを開く書き方がわかりません。 よろしくお願いします。

  • アクセスからエクセルへの処理

    Private Sub エクスポート_Click() Dim myExcel As Object 'エクセルに出力 DoCmd.TransferSpreadsheet filename:=CurrentProject.Path & "\分析素材\test.xls", _ tablename:="HJEX016", _ transfertype:=acExport 'ファイルを開く Set myExcel = CreateObject("Excel.Application")   myExcel.Visible = True ★ myExcel.workbooks.Open filename:=CurrentProject.Path & "\分析素材\test.xls" アクセスのテーブルをエクセルシートに出力し、そのファイルを開くという プログラムを作成してみたのですが、★のところで固まってしまいます。 何がいけないのでしょうか?

  • アクセス(access)からエクセルにエクスポート

    アクセスから、エクセルにクエリのデータを出力する際に、 「TransferSpreadsheet」を使用していますが、 そのエラー処理について、教えて下さい。 保存しようとしているファイルが既に開かれている場合に、 処理を中止し、エラーメッセージを出したいのですが、 どのようにすればいいのでしょうか? なお、現在のVBAは次のとおりです。 Private Sub コマンド01_Click() Dim a As String Dim b As Variant a = "Q_一覧表" b = "C:\一覧表.xls" DoCmd.TransferSpreadsheet acExport, _ acSpreadsheetTypeExcel9, a, b, True MsgBox "データを出力しました。" Exit Sub End Sub

  • ACCESS エクスポートについて

    ACCESSのエクセルへのエクスポートについて お世話になりあます。 既存エクセルにACCESSのDoCmdを使用してエクスポートしようと考えています。 エクスポート先は既存エクセル(セルに数式あり)です。 DoCmd.TransferSpreadsheet acExport, SpreadsheetType, TableName, FileName , True,SheetName という分を作り実行しましたが、「ワークシートのセルが削除できません」と出てしまい エクスポートできません。 ヘルプを見ると数式が含まれていると出来ないと書いてありました。 数式を消さないと出来ないのでしょうか。 お手数ですが、分かる方おられましたら教えて下さい。

  • Accessエクスポート時に連番を入れたい。

    クエリ出力は以下でできたのですが、 ワークシート名がQ_testのみで上書きになります。 Excel出力時に、Q_testxx (x=月)にしたいです。 Function M_test() On Error GoTo M_test_Err DoCmd.TransferSpreadsheet acExport, 8, "Q_test", "c:\test.xls", False, "" M_test_Exit: Exit Function M_test_Err: MsgBox Error$ Resume M_test_Exit End Function

専門家に質問してみよう