• ベストアンサー

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

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

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

フォームで絞り込めているのでしょ だったら同じしぼりこみをするクエリを作るだけです それともクエリの作り方がわからないということですか? クエリで授業名フィールドの抽出条件欄に =Forms!フォーム名!コンボボックス名 と書けばフォームと同じ絞り込みができます

maigo-no-koneko
質問者

お礼

再度のご回等ありがとうござました!解決しました。 やりたいことができました!! なんだか難しく考えすぎていたようで。。。 本当にありがとうございました。

その他の回答 (2)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

いろいろ書いていますが要は「Q_受講者名簿用」を出力しているだけですね ということはこのクエリがご希望のものでないというだけではないですか 〉[授業名]フィールドのコンボボックスで、指定した授業のみ抽出します クエリでもこの抽出を指定してやればいいだけのことだと思いますけど

maigo-no-koneko
質問者

補足

ご意見ありがとうございます。 回答に補足をさせて頂いて再度ご意見いただければ幸いです。 「Q_受講者名簿用」のデータを出力していることになります。 データ量が多く(レコード件数30000くらい)、また、その時々で呼び出したいレコードは様々です。 レコードの内容は「講座内容」「受講者番号」「受講者氏名」くらいですが。講座の数が50くらいあるので、「●●講座の受講者名簿データ」が必要ということになるのです。フォーム上ではできてもデータとしてエクスポートできないので困っております。 私が現在試行錯誤している方法以外で、ユーザーが「講座内容」をコンボボックスで選択して、選択した講座内容のみの名簿データをエクスポートする方法があれば、教えていただければと思います。 どうぞよろしくお願いいたします。

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.1

いろいろ方法として、考えられますが・・・ 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 って、感じ・・・エクセル上での表示書式や色々整えてるから、余分なところが多いかもしれないけどね

maigo-no-koneko
質問者

補足

ご回答ありがとうございます。 まだまだ勉強不足の私には、上記の内容をどのように扱えばいいかちょっと迷ってしまっています。申し訳ないです。 >出力用のクエリを一時的に作成するとか 具体的にどのような方法かご回答頂ければ嬉しいです。 できればエクセルの方にVBAを記述する方法ではなく、ユーザーが普段使用するアクセスでVBAを記述できているほうがいいので、アクセスで希望した「授業名」のみのデータをエクセルに出力する方法があれば、教えていただければと思います。よろしくお願いいたします。

関連するQ&A

  • クエリの抽出結果がフォームに表示できない

    ACCESS2010を使用しています。 フォーム画面で、選択クエリのデータをコンボボックスで選択し結果を表示させ、その後エクセル形式でエクスポートしたいと思っています。 選択結果をエクセル形式でエクスポートはうまくいくのですが、フォーム画面には表示がされません。 Q_名簿では 授業名のフィールドに抽出条件として [Forms]![F_名簿表示画面]![combo1] としています。 また、コンボボックスで選択した後にフォームに表示させるコマンドボタンは下記のように記述しています。 この記述でフォームに表示がされなくて困っています。 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 どうすればフォームに表示がされるでしょうか。 ご指導の程お願いいたします。

  • アクセス2007VBAのクエリのエキスポート

    お世話になります。 以下の様にアクセス2007のクエリを エクセルにエクスポートのVBAを作成したところ うまく動作しません。 どこか構文が間違ってるのでしょうか? Private Sub トグル2_Click() Dim acc1 As String Dim exce1 As Variant acc1 = "q_有給付与後" ecxe1 = "G:\MOCF05602\大信\エクスポートテスト.xlsx" DoCmd.TransferSpreadsheet acExport, _ acSpreadsheetTypeExcel12Xml, acc1, exce1, True MsgBox "エクスポート完了★" End Sub

  • ACCESS エクスポート ダイアログ ファイル名取得

    ACCESS2003で作成したデータをダイアログで指定したファイル名でエクスポートしたいのですが、上手くできません。 ダイアログが開きその指定したフォルダーにあるエクセルファイルを選択すれば、正常にエキスポートできるのですが、 開いたダイアログにファイル名を入力すると、それ以降動かなくなります。 基本的なことが間違っているのでしょうか?? 詳しい方教えてください。下記にコードした内容を書きました。 よろしくお願いします。 Private Sub cmbTransExcel_Click() On Error GoTo Err_cmbTransExcel_Click Dim fileSaveName As Variant Set dlg = Application.FileDialog(msoFileDialogOpen) With dlg .Title = "チェック" .ButtonName = "エキスポート" .InitialFileName = "C:\Program Files\DATA\" .InitialView = msoFileDialogViewList .AllowMultiSelect = False .Filters.Clear .Filters.Add "xls", "*.xls" End With With dlg If .Show = -1 Then For Each vntPath In dlg.SelectedItems strPath = vntPath Next Else Set dlg = Nothing Exit Sub End If End With Set dlg = Nothing Dim strac As String Dim varxls As Variant Dim strmsg As String strac = "Q_チェック" 'Accessファイルを指定します。 varxls = strPath 'エクセルファイルを指定します。 strmsg = strac & " を、Excelファイルへ出力します。" & Chr(13) & _ "出力先は" & varxls & "、 シート名は" & strac & "です。" & _ Chr(13) & "よろしければ、OKをクリックして下さい。" If MsgBox(strmsg, vbOKCancel) = vbOK Then '最初のデータをフィールド名として使います。 DoCmd.TransferSpreadsheet acExport, _ acSpreadsheetTypeExcel9, strac, varxls, True MsgBox "EXCELの出力が正常終了しました。", vbInformation, "処理終了" End If Exit_cmbTransExcel_click: Exit Sub Err_cmbTransExcel_Click: MsgBox "EXCELの出力が異常終了しました。", vbCritical, "エラー!" Resume Exit_cmbTransExcel_click End Sub

  • Accessフォームの作成

    Accessで作成されているシステムの ファイル取り込みフォームにある実行ボタンを押下すると、 下記のメッセージが表示されます。 「select case に対応する case がみつからない。」 どこかで指定しないといけないのでしょうか? Private Sub Cmd実行_Click() On Error GoTo Err Dim StrSql As String Dim IntNDCnt As Integer Dim IntNTCnt As Integer '確認メッセージの出力 If MsgBox("処理を開始します。よろしいですか?", vbInformation + vbYesNo, "データ取込処理") = vbNo Then Exit Sub End If '対象データ別の処理実行 Select Case Me.Cmb対象.ListIndex Case -1 'エラー MsgBox "読込むデータを指定してください", vbCritical, "データ取込処理" Exit Sub Case 0 '全データ If F_手数料明細読込() = False Then Exit Sub End If If F_奨励金読込() = False Then Exit Sub End If If F_減額読込() = False Then Exit Sub End If If F_預り金読込() = False Then Exit Sub End If Case 1 '手数料データ If F_手数料明細読込() = False Then Exit Sub End If Case 2 '奨励金データ If F_奨励金読込() = False Then Exit Sub End If Case 3 '減額データ If F_減額読込() = False Then Exit Sub Case 4 '預り金データ If F_預り金読込() = False Then Exit Sub End If End Select 今は、Case 4が黄色に反転します。

  • アクセス(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 テキスト インポート

    現在指定したファイルしかインポートしが出来ないのでこれを 指定したファイルをインポートしたいのですがどのようすれは、いいでしょうか?よろしくお願いします。 Private Sub コマンド5_Click() On Error Resume Next Dim MsgNo As Integer Dim Msg1, Msg2, Msg3 As String Dim su As String Dim cut As Integer Dim fd As String Dim suu As String Dim db As Database Dim d1 As Recordset Msg1 = " インポートを開始します。" Msg2 = "「DAT」ファイルがありません。" Msg3 = "「DAT」ファイルを c:\DATデータにコピーし、再度実行して下さい。" MsgNo = MsgBox(Chr(9) & Msg1 & Chr(9), 1) If MsgNo = 2 Then 'キャンセルボタンで終了 GoTo Exit_インポート_Click End If EmptyAllTable 'テーブルクリア Set db = CurrentDb Set d1 = db.OpenRecordset("t_製品データ") fd = Dir("C:\DATデータ\*.dat") If fd = "" Then 'ファイルがなければ、メッセージを表示、処理を戻します。 Beep MsgNo = MsgBox(Msg2 & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Msg3, 16) GoTo Exit_インポート_Click End If

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

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

  • フォーム上のフィルタで抽出されたデータをテーブルに格納したい

    フォーム上のフィルタで抽出されたデータをテーブルに格納したい 度々お世話になります。 フォーム上で3つのキーワードを使って抽出したデータを テーブルに格納したいと思っています。 以下のコードを書いたところ、矢印の部分でエラーが起こります。 お知恵を拝借できませんでしょうか? よろしくお願いいたします。 Private Sub cmd04_Click() Dim db As DAO.Database Set db = CurrentDb() Dim mySQL As String mySQL = "INSERT INTO 04_パソコン機器管理台帳 select * FROM T05_使用者一覧抽出結果 WHERE " & Me.Filter & ";" If MsgBox("該当レコードを追加します。", vbYesNo) = vbYes Then ' SQLを実行します。 db.Execute mySQL   ←エラーが発生します。 MsgBox "該当レコードを追加しました。" End If End Sub

  • アクセスで3つのフィルターを連携させたい

    3つのコンボックスがあります Combo1 → 都道府県 Combo2 → 市区 Combo3 → 町村 都道府県と市区までは正常にフィルター出来るのですが、町村を選ぶと都道府県や市区も 同じ町村の名前のデータを引っ張ってきてしまいます。 ボタンを付けることも考えましたが、VBAの能力があまりないので、失敗ばかりしています。 良い知恵を教えて頂けないでしょうか。 Private Sub Combo1_AfterUpdate() Dim Strkubun As String Strkubun = Me.Combo1 Me.Filter = "[都道府県]= '" & Strkubun & "'" Me.FilterOn = True Me.Requery End Sub Private Sub Combo2_AfterUpdate() Dim Strkubun As String Strkubun = Me.Combo2 Me.Filter = "[市区]= '" & Strkubun & "'" Me.FilterOn = True Me.Requery End Sub Private Sub Combo3_AfterUpdate() Dim Strkubun As String Strkubun = Me.Combo3 Me.Filter = "[町村]= '" & Strkubun & "'" Me.FilterOn = True Me.Refresh End Sub

  • AccessのVBAに関しての質問です。

    クエリで抽出したファイルをCSVで出力させ、出力したファイル名を「連番&ファイル名」の形にしたく 下記のコードを使用しました。 6ファイルは出力は成功したのですが、7ファイル目を出力しようとしたところ、「#6:オーバーフロウしました。」とエラーがでてきてしまいます。 原因やここのコードを変えれば直るというのが、お分かりになる方がいればご教示頂けますでしょうか。 初心者ですのでコードも書いて頂けると非常に助かります。 Private Sub コマンド4_Click() On Error GoTo ErrorTrap Dim varAccess As Variant Dim varCPass As Variant Dim strmsg As String varAccess = "ASN抽出" Dim FolderPass As String Dim FileName As String Dim CheckCount As Integer FolderPass = "C:¥Users¥エクスポート¥" FileName = "_STORE_ASN_TRN.csv" CheckCount = 0 Do Until Dir(FolderPass & FileName) = "" CheckCount = CheckCount + 1 FileName = Format(CheckCount, Len(CStr(CheckCount)) + 1) & "_STORE_ASN_TRN" & ".csv" Loop varTextPass = FolderPass & FileName strmsg = "csvファイルへ出力します。" & Chr(13) & _ "出力先は" & varTextPass & "です。" & _ "よろしければ、OKをクリックして下さい。" If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferText acExportDelim, , varAccess, varTextPass, False MsgBox "データ出力は、正常に完了しました。" End If Exit Sub ErrorTrap: If Err.Number = 3044 Then ' MsgBox "パス指定が誤っています。", vbCritical Else MsgBox "予期せぬエラーが発生しました。(#" & Err.Number & " : " & Err.Description & ")", vbCritical End If End Sub

専門家に質問してみよう