- ベストアンサー
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
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
フォームで絞り込めているのでしょ だったら同じしぼりこみをするクエリを作るだけです それともクエリの作り方がわからないということですか? クエリで授業名フィールドの抽出条件欄に =Forms!フォーム名!コンボボックス名 と書けばフォームと同じ絞り込みができます
その他の回答 (2)
- CHRONOS_0
- ベストアンサー率54% (457/838)
いろいろ書いていますが要は「Q_受講者名簿用」を出力しているだけですね ということはこのクエリがご希望のものでないというだけではないですか 〉[授業名]フィールドのコンボボックスで、指定した授業のみ抽出します クエリでもこの抽出を指定してやればいいだけのことだと思いますけど
補足
ご意見ありがとうございます。 回答に補足をさせて頂いて再度ご意見いただければ幸いです。 「Q_受講者名簿用」のデータを出力していることになります。 データ量が多く(レコード件数30000くらい)、また、その時々で呼び出したいレコードは様々です。 レコードの内容は「講座内容」「受講者番号」「受講者氏名」くらいですが。講座の数が50くらいあるので、「●●講座の受講者名簿データ」が必要ということになるのです。フォーム上ではできてもデータとしてエクスポートできないので困っております。 私が現在試行錯誤している方法以外で、ユーザーが「講座内容」をコンボボックスで選択して、選択した講座内容のみの名簿データをエクスポートする方法があれば、教えていただければと思います。 どうぞよろしくお願いいたします。
- Dxak
- ベストアンサー率34% (510/1465)
いろいろ方法として、考えられますが・・・ DAO等で、出力用のクエリを一時的に作成するとか DAO等で、直接Excelに書き込み、保存を掛けるとか 例えばの話だから、他にも考えられないことは無いけど・・・ Excelへ直接テーブルを書き込む場合ね Private Sub Excel_Export() Dim xlApp As Excel.Application Dim DAOrs As DAO.Recordset Dim DAOfd As DAO.Field Dim usSQL As String Dim usRow As Long Dim usCol As Long DoCmd.Hourglass True ' usSQLを書き換えることによって、何とでも可 usSQL = "Select * From Q_受講者名簿用 Where [授業名]='" & combo1 & "';" Set xlApp = CreateObject("Excel.Application") Set DAOrs = CurrentDb.OpenRecordset(usSQL) With xlApp ' 出力用Excel新規作成 .Workbooks.Add ' 出力用Excel表題作成 usCol = 1 For Each DAOfd In DAOrs.Fields .ActiveSheet.Cells(1, usCol) = DAOfd.NAME Select Case DAOfd.Type Case dbDate .ActiveSheet.Columns(usCol).NumberFormat = "yyyy/mm/dd" Case dbInteger, dbLong .ActiveSheet.Columns(usCol).NumberFormat = "#,##0" Case Else .ActiveSheet.Columns(usCol).NumberFormat = "@" End Select usCol = usCol + 1 Next DAOfd ' 出力用Excelリスト作成 usRow = 2 While Not DAOrs.EOF usCol = 1 For Each DAOfd In DAOrs.Fields .ActiveSheet.Cells(usRow, usCol) = DAOfd.Value usCol = usCol + 1 Next DAOfd usRow = usRow + 1 DAOrs.MoveNext Wend ' 閲覧用Excel整え .Range("A2").Select .ActiveWindow.FreezePanes = True .Cells.Columns.AutoFit .Cells.Rows.AutoFit .Visible = True End With Set xlApp = Nothing Set DAOrs = Nothing DoCmd.Hourglass False End Sub って、感じ・・・エクセル上での表示書式や色々整えてるから、余分なところが多いかもしれないけどね
補足
ご回答ありがとうございます。 まだまだ勉強不足の私には、上記の内容をどのように扱えばいいかちょっと迷ってしまっています。申し訳ないです。 >出力用のクエリを一時的に作成するとか 具体的にどのような方法かご回答頂ければ嬉しいです。 できればエクセルの方にVBAを記述する方法ではなく、ユーザーが普段使用するアクセスでVBAを記述できているほうがいいので、アクセスで希望した「授業名」のみのデータをエクセルに出力する方法があれば、教えていただければと思います。よろしくお願いいたします。
お礼
再度のご回等ありがとうござました!解決しました。 やりたいことができました!! なんだか難しく考えすぎていたようで。。。 本当にありがとうございました。