Access2010でのExcel出力について

このQ&Aのポイント
  • Access2010のクエリで抽出した結果をExcelに出力する方法について説明します。
  • クエリの結果、特定のフィールドのデータがExcelに正しく出力されない問題が発生しています。
  • これを解決するためには、Excel出力時に2列目のデータも正しく指定する必要があります。
回答を見る
  • ベストアンサー

Access2010でのExcel出力について

お世話になります。 Access2010のクエリで抽出した結果を下記のコマンドでExcelに出力しています。 Private Sub コマンド6_Click() Dim デスクトップの場所 As String デスクトップの場所 = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\" If Nz(Dir(デスクトップの場所 & "log.xlsx"), "") <> "" Then If vbNo = MsgBox("デスクトップに同じ名前のファイルが存在します。上書きしますか?", vbYesNo + vbQuestion, "ファイルが存在します") Then Exit Sub End If End If DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Q_syukei", デスクトップの場所 & "log.xlsx" DoCmd.Close MsgBox "デスクトップに案件ログのExcelファイルが出力されました" End Sub その中のフィールドにコンボボックス利用のデータが複数あり、 1列目にID番号が振られていて、2列目に目的のデータ項目が格納されています。 元のテーブルでも、クエリでも列幅を0cm;10cmとしていて、 クエリの結果もAccess上で見ると2列目のデータ項目が表示されるのですが、 出力されたExcelには1列目のID番号しか載ってきていません。 2列目のデータをExcelに出力するにはどうすればよいでしょうか。 ご教授ください。

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

  • ベストアンサー
回答No.2

コンボボックスで列幅を 0cm にして非表示にしても、実際に格納されいるデータは連結列のデータですのでそうなります。 テーブルのフィールドのルックアップの値集合タイプは、「テーブル/クエリ」ですか。 もし、そうなら、Q_syukei に、値集合ソースに設定してあるテーブルを追加して、 「ID番号」同士で結合して、クエリのフィールドには、2列目のデータ項目を表示させるようにしてください。 これで、エクスポートしてもデータ項目が表示されます。 このようなクエリをオートルックアップクエリといって、Accessの基本ですのでぜひ修得してください。 オート ルックアップ クエリを作成するには http://support.microsoft.com/kb/879978/ja

coumekiti
質問者

お礼

hatena1989さん ご回答ありがとうございます。 そっか、せっかく結合するのにテーブルを追加しているのだから、クエリのフィールドにそっちのテーブルからデータ項目を設定するようにすればいいのですね。 頭が固くなってました。 ありがとうございます!

その他の回答 (1)

回答No.1

ルックアップを設定している値は、一番目の列の値がエクスポートされますね。 ならば、2番目の列値を表示するようにクエリを改変するしかありません。 SELECT   T1.ID,   T1.分類,   CutStr("AAA;BBB",";",Nz([分類])) AS 分類の値,   T1.名前,   T1.ランキング FROM T1; このクエリの実行結果とエクスポート結果は図のようです。 祈、成功!

coumekiti
質問者

お礼

f_a_007さん ご回答ありがとうございます。 こんな方法もあるのですね。 大変勉強になりました。 ありがとうございます!

関連する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の引数が違うのかとは思いますが適切な数値がわかりません。 他のやり方等もあれば教えて下さい。

  • AccessVBA エクセル出力時にエラー

    Private Sub コマンド1_Ckick() If リスト = "1"Then DoCmd. TransferSpreadsheet acExport_ , , "クエリ1","MicrosoftExcel(*.xlxs)" ElseIf リスト = "2"Then DoCmd. TransferSpreadsheet acExport_ , , "クエリ2","MicrosoftExcel(*.xlxs)" End If End Sub ------------ リスト(1 Or 2)を選択後、コマンド1をクリックすると、 リストの選択に合わせてクエリをエクセル出力したいです。 行数が10万行と多い為、 行数制限があるマクロビルダーの「書式を保持してエクスポート」を使わず XLXS形式で出力したいです。 しかし、上のVBAを実行したところ、 「データベースまたはオブジェクトは読み取り専用なので更新できません」 というエラーが出てしまいます。 どこを訂正すればよいのかわからず困っています。 どうかご教授の程、よろしくお願いいたします。

  • AccessからのExcel出力

    お世話になります。 Access2010 フォームに「Excel出力」ボタンを設置し、押すとクエリの内容を Excelに出力するツールを作成しました。 具体的には、ボタンを押すと出力先を指定するダイアログを表示し、 フォルダが選択されたら、そのパスを取得し、そこにExcelファイルが 作成されます。 出力されるファイル名は「情報_yyyymmdd.xlsx」です。 DoCmd.TransferSpreadsheet acExport, 10, "Q_Dummy", strFolder & "情報_" & Format(Date, "yyyymmdd") & ".xlsx", True, "" strFolderは、ダイアログで選択されたパス Q_Dummyは出力するクエリ <質問1> 上記にて問題無く出力はされますが、例えば今日だと「情報_20160704.xlsx」 というファイルをデスクトップに作成したとします。 で、再度デスクトップに作成しようとした場合「既に同じ名前のファイルが あります、上書きしますか?」というメッセージは表示されず そのまま上書きされてしまいます。 DoCmd.TransferSpreadsheet acExportを実行する前に、事前に出力先の パスに同ファイル名が存在していないかチェックした上で、手動で 「上書きしますか?」のメッセージを表示させる必要があるのでしょうか。 <質問2> 「そのまま上書きされてしまいます。」と書きましたが、実際には マージされてしまうようです。 例えば、2レコード抽出されたクエリの内容を出力し、そのExcelを開いて 表外に「ああああ」と入力します。 次に条件を変えて3レコード抽出されたクエリの内容を出力します。 そうすると、ちゃんと3レコードの内容が出力されていますが 表外に入力した「ああああ」は残ってます。 ※画像1 また、表内のセルに「AAAA」と入力し、そのセルに色付けした状態で、 再度出力すると、「AAAA」は上書きされますが、色は付いたままです。 ※画像2 という結果から、  ・ファイル自体が作成し直される訳ではない。  ・上書きされる部分はあくまでもクエリの内容(表内)の部分だけ   であり、書式や表外の部分については上書きされない。 ということになるかと思います。 その認識で問題ありませんでしょうか。 上書きされないように(そもそも同じファイル名にならないように) ファイル名を「情報_yyyymmdd_hhmmss.xlsx」にすればいいかとは 思うのですが。。 ご教示の程、宜しくお願い致します。

  • ACCESSデータをEXCELに出力したい。

    ACCESSでフィルタを使って複数項目(空欄の箇所がある場合もあり)を抽出したデータ(サブフォームに表示)だけをEXCELに出力したいのですが、下記のコードではすべてのデータが出力されてしまいます。 ------------------------------- Private Sub 出力_Click() DoCmd.OutputTo acOutputQuery, "Q_出力", acFormatXLS End Sub ------------------------------- 情報が少なかったらすみません。 よろしくお願いいたします。

  • 「クエリが閉じてるなら」「クエリが開いてるなら」

    Sub test() If クエリが閉じてるなら Then  DoCmd.OpenQuery "クエリ1" ElseIf クエリが開いてるなら Then  DoCmd.Close acQuery, "クエリ1" End If End Sub という事をやりたいのですが、 「クエリが閉じてるなら」 「クエリが開いてるなら」 のコードがわかりません。 よろしくお願い致します。

  • ACCESS エクセル取込 列指定

    下記のコードでエクセル取込を行おうと思いましたが、列指定をする"A:M, O:V"の箇所でエラーとなってしまいました。A:M列だけならエラーもなく取り込めますが、O:V列も取り込みたいです。 N列を取り込みたくない理由としては、文字と数字が混在していて、省きたいと思っております。 何か良い方法はございませんでしょうか? DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "T_SAPShohin", Path, True, "A:M, O:V" ←エラー ____________________________________________________________________ Private Sub SAPShohin_Click() Dim Path As String Dim Res As String WizHook.Key = 51488399 Res = WizHook.GetFileName(0, "", "", "", Path, "CurrentProject.Path", "(*.xlsx,*.xls)", 0, 0, 4, -1) If Res = 0 Then '取得したファイルパス(Path)でExcelからインポート DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "T_SAPShohin", Path, True, "A:M, O:V" Else '[キャンセル]ボタンが押された場合の処理 MsgBox "[キャンセル]ボタンが押されました。" Exit Sub End If MsgBox "インポートできました!"

  • AccessからExcelの操作

    OS:WindowsXP ソフト:Access2003 お世話になります。 Accessのクエリで抽出したデータをExcelに出力し、その後出力ファイルを開き 形式を整えたいと考えています。 Excel出力は任意の場所に出力したいと考えています。 出力については過去の質問などを検索し以下のコードで無事出力されるのは確認できました。 *************************************************************** Sub Save() DoCmd.TransferSpreadsheet acExport, 8, "Q004", GetSaveName, True End Sub Function GetSaveName(Optional ByVal strFile As String) Dim intResult As Integer With WizHook .Key = 51488399 intResult = .GetFileName(0, "", "保存先を選択してください", "保存", strFile, "", "MicrosoftExcel ブック (*.xls)|*.xls", 0, 0, 0, False) .Key = 0 End With If intResult = -302 Then 'キャンセルされた場合 GetSaveName = "False" Else GetSaveName = strFile End If End Function *************************************************************** この後に対象のExcelを開きたいのですが、うまく対象のファイルを開く事が出来ません。 CreateObject("Excel.Application") xls.Workbooks.Open() 上記のコマンドでExcelが開けると思うのですが、Open()のカッコ内には どのように指定すれば良いのでしょうか? ちなみにExcelを開いた後にやりたい事は見出し部分より上にヘッダーとして 作成日付を入力したいと考えています。 よろしくお願いします。

  • ACCESS 2000でのExcel出力

    ACCESS 2000でExcel出力時に下記のソースで出力しています。 出力先をユーザーに選択させたい(Windowsでファイル保存時に出てくるやつみたいに)のですが、どのような方法がありますか? Private Sub 集計結果_Click() DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, _ "クエリA", "c:\集計.xls" End Sub 宜しくお願いします。

  • アクセス(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 クエリ→フォーム フィルターをかけたデータのみエクスポートしたい

    よろしくお願いします。 クエリのデータをフォームで表示し、その時にコンボボックスで表示するデータを指定し抽出・表示しています。([授業名]フィールドのコンボボックスで、指定した授業のみ抽出します) 最終的に抽出したデータを、コマンドボタンでエクスポートできるようにしたいのですが、私の記述方法では「全てのクエリのデータ」がエクスポートされてしまいます。 どのような方法でもいいのですが、指定したデータ([授業名])のみエクスポートする方法はないでしょうか・・・? *データエクスポートのVBA記述内容* Private Sub cmdデータ出力_Click() '名簿データのエクスポート Dim msg As String msg = MsgBox("名簿データを出力します。", vbYesNo, "出力確認") If msg = vbYes Then 'どの場所にデータをエクスポートするか指定 DoCmd.TransferSpreadsheet acExport, , "Q_受講者名簿用", _ "Y:\○○課\住所録データエクスポート場所\" & "受講者名簿【ACCESSより】.xls", True answer = MsgBox("受講者名簿データを出力しました", vbOKOnly, "データの出力の確認") cancel = True End If End Sub *ちなみに、フォーム上でフィルターをかけたVBAは* Private Sub cmd名簿_Click() Dim stList As String Dim stFil As String If combo1 <> "" Then stFil = "[授業名]='" & combo1 & "'" End If Me.Filter = stFil Me.FilterOn = True End Sub

専門家に質問してみよう