• ベストアンサー

Accessの検索結果からテーブル作成。(もしくはエクセルへエクスポート)

Accessで検索フォームを作成しました。 (コードで操作。) この結果をレポートやフォームに表示するのはできたのですが、 この検索結果からテーブルを作成というのはどのようにやるのでしょうか? 最終的にはその作成したテーブルからエクセルへエクスポートしたいのです。 宜しくお願いします。 Ac2000

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

ご苦労様です。 Excelへのエクスポートは、DoCmdのTransferSpreadsheetメソッドで出来ます。 書式は、 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "T_検索結果", "Excelファイル名(フルパス)", True 第1引数は、エクスポートを表す定数です。インポートならacImportを指定します。 第2引数は、Excelのバージョンです。2000か2002なら8か9です。 第3引数は、エクスポートするテーブル名 第4引数は、エクスポートするExcelファイル名。フルパスで指定します。 第5引数は、TrueならExcelの1行目にフィールド名をつけます。Falseならなしです。 これをエクスポートしたい場所(少なくともT_検索結果を作成後)に置きます。 では。

KODAMAR
質問者

お礼

いつもすばやくありがとうございます。 おかげさまで無事できました! ありがとうございます。 また何かありましたら質問すると思いますので、 そのときはまたよろしくおねがいします。 本当にありがとうございました。

その他の回答 (3)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 テーブル作成のSQLにWHERE句をつければいいです。 DoCmd.RunSQL "SELECT ~(中略)~ FROM T_マスタ WHERE " & WhereCond これを、DoCmd.OpenForm文の手前に置きます。 なお、この場合、先にT_検索結果というテーブルが作られるので、F_検索結果フォームのレコードソースをT_検索結果にして(元はT_マスタがレコードソースだったと思いますが)、 DoCmd.OpenForm "F_検索結果", acNormal という風にしてもいいです(3番目以降の引数をなしにする)。 元のOpenFormでは、T_マスタを条件抽出した結果をフォームに表示していましたが、この場合は、T_検索結果をそのままフォームに表示します。(どちらも同じ) では。

KODAMAR
質問者

お礼

いつもいつもありがとうございます。 無事テーブル作成することができました。 贅沢ですが、できれば同じボタンひとつ押しただけで、 テーブル作成 > エクセルへエクスポート なんていうことができればいいな、なんて思っていたりします。 エクスポートをボタンで制御することはできますか?

noname#9485
noname#9485
回答No.2

クエリ画面で抽出条件をパラメータで作成します。 その状態でテーブル作成クエリにすれば、 条件に合ったレコードだけでテーブルを作成できると思うのですが

KODAMAR
質問者

補足

回答ありがとうございます。 実際の検索フォームを ---------------------------------------- 検索方法は「OR」か「AND」で選べる。 ・名前1・名前2・名前3・名前4・名前5(この1~5はすべてOR検索) ・データ年 ・データ種類 ・削除対象(全て/あり/なし のラジオボタン) ・挨拶状送付(全て/あり/なし のラジオボタン) ・喪中(全て/あり/なし のラジオボタン) ---------------------------------------- とします。 検索ボタンのコードは ---------------------------------------- Private Sub コマンド3_Click() Dim SQL As String Dim WhereCond As String Dim condName As String Dim condYear As String Dim condSyubetsu As String Dim congSakujo As String Dim congAisatsujo As String Dim congMotyuu As String Dim tempOper As String '演算子 Dim strCount As Long '演算子の文字数 Dim tempCond As String WhereCond = "" '変数の初期化。本当はいらないけど明示的に。 Select Case Me!fraOper.Value Case 1 'AND検索 tempOper = " AND " '前後の半角スペースを忘れずに strCount = 5 Case 2 'OR検索 tempOper = " OR " '前後の半角スペースを忘れずに strCount = 4 End Select tempCond = "" '名前 If Me!名前.Value <> "" Then condName = "(T_マスタ.氏名 like '*" & Me!名前.Value & "*')" condName2 = "(T_マスタ.氏名 like '*" & Me!名前2.Value & "*')" condName3 = "(T_マスタ.氏名 like '*" & Me!名前3.Value & "*')" condName4 = "(T_マスタ.氏名 like '*" & Me!名前4.Value & "*')" condname5 = "(T_マスタ.氏名 like '*" & Me!名前5.Value & "*')" tempCond = tempCond & " OR (" & condName & " OR " & condName2 & " OR " & condName3 & " or " & condName4 & " or " & condname5 & ")" End If '名前2 If Me!名前2.Value <> "" Then condName = "(T_マスタ.氏名 like '*" & Me!名前.Value & "*')" condName2 = "(T_マスタ.氏名 like '*" & Me!名前2.Value & "*')" condName3 = "(T_マスタ.氏名 like '*" & Me!名前3.Value & "*')" condName4 = "(T_マスタ.氏名 like '*" & Me!名前4.Value & "*')" condname5 = "(T_マスタ.氏名 like '*" & Me!名前5.Value & "*')" tempCond = tempCond & " OR (" & condName & " OR " & condName2 & " OR " & condName3 & " or " & condName4 & " or " & condname5 & ")" End If '名前3 If Me!名前3.Value <> "" Then condName = "(T_マスタ.氏名 like '*" & Me!名前.Value & "*')" condName2 = "(T_マスタ.氏名 like '*" & Me!名前2.Value & "*')" condName3 = "(T_マスタ.氏名 like '*" & Me!名前3.Value & "*')" condName4 = "(T_マスタ.氏名 like '*" & Me!名前4.Value & "*')" condname5 = "(T_マスタ.氏名 like '*" & Me!名前5.Value & "*')" tempCond = tempCond & " OR (" & condName & " OR " & condName2 & " OR " & condName3 & " or " & condName4 & " or " & condname5 & ")" End If '名前4 If Me!名前4.Value <> "" Then condName = "(T_マスタ.氏名 like '*" & Me!名前.Value & "*')" condName2 = "(T_マスタ.氏名 like '*" & Me!名前2.Value & "*')" condName3 = "(T_マスタ.氏名 like '*" & Me!名前3.Value & "*')" condName4 = "(T_マスタ.氏名 like '*" & Me!名前4.Value & "*')" condname5 = "(T_マスタ.氏名 like '*" & Me!名前5.Value & "*')" tempCond = tempCond & " OR (" & condName & " OR " & condName2 & " OR " & condName3 & " or " & condName4 & " or " & condname5 & ")" End If '名前5 If Me!名前5.Value <> "" Then condName = "(T_マスタ.氏名 like '*" & Me!名前.Value & "*')" condName2 = "(T_マスタ.氏名 like '*" & Me!名前2.Value & "*')" condName3 = "(T_マスタ.氏名 like '*" & Me!名前3.Value & "*')" condName4 = "(T_マスタ.氏名 like '*" & Me!名前4.Value & "*')" condname5 = "(T_マスタ.氏名 like '*" & Me!名前5.Value & "*')" tempCond = tempCond & " OR (" & condName & " OR " & condName2 & " OR " & condName3 & " or " & condName4 & " or " & condname5 & ")" End If If tempCond <> "" Then tempCond = Mid(tempCond, 5) WhereCond = WhereCond & tempOper & "(" & tempCond & ")" End If 'データ年 If Me!データ年.Value <> "" Then condYear = "(T_マスタ.データ年 like '*" & Me!データ年.Value & "*')" WhereCond = WhereCond & tempOper & condYear End If 'データ種類 If Me!データ種類.Value <> "" Then condSyubetsu = "(T_マスタ.データ種類 like '*" & Me!データ種類.Value & "*')" WhereCond = WhereCond & tempOper & condSyubetsu End If '削除対象 Select Case Me!frame_削除対象.Value Case 1 '全て '何もしない Case 2 'あり condSakujo = "(T_マスタ.削除対象 = " & True & ")" WhereCond = WhereCond & tempOper & condSakujo Case 3 'なし condSakujo = "(T_マスタ.削除対象 = " & False & ")" WhereCond = WhereCond & tempOper & condSakujo End Select '挨拶状送付 Select Case Me!frame_挨拶状送付.Value Case 1 '全て '何もしない Case 2 'あり condAisatsujo = "(T_マスタ.挨拶状送付 = " & True & ")" WhereCond = WhereCond & tempOper & condAisatsujo Case 3 'なし condAisatsujo = "(T_マスタ.挨拶状送付 = " & False & ")" WhereCond = WhereCond & tempOper & condAisatsujo End Select '喪中 Select Case Me!frame_喪中.Value Case 1 '全て '何もしない Case 2 'あり condMotyuu = "(T_マスタ.喪中 = " & True & ")" WhereCond = WhereCond & tempOper & condMotyuu Case 3 'なし condMotyuu = "(T_マスタ.喪中 = " & False & ")" WhereCond = WhereCond & tempOper & condMotyuu End Select DoCmd.OpenForm "F_検索結果", acNormal, , WhereCond End Sub ---------------------------------------- です。 そのままのテーブル作成(検索を行わない)のコードは ---------------------------------------- DoCmd.RunSQL "SELECT T_マスタ.氏名ID, T_マスタ.氏名,・・・・・ INTO T_検索結果" _ & " FROM T_マスタ" ---------------------------------------- とわかるのですが、検索フォームで検索をした結果でテーブルを作成したい場合はどのようにすればいいのでしょうか? パラメータも考えたのですが、名前などが複数ある場合はきちんとした結果が 出なかったので。。。(これがなくなるのであれば、パラメータクエリで、 というのもできそうですが。) 宜しくお願いします。

noname#166310
noname#166310
回答No.1

そのコードがどんなものかはわからないのですが、テーブル作成クエリを使えばできるはずだと思います。(クエリの画面でクエリの種類をテーブル作成に変えます) テーブル作成などの「選択クエリ」以外のクエリ(アクションクエリ)はACCESSのインストールの状態が完全ではないと使えないかもしれませんので、そこには注意をしてください。 テーブルができれば、エクスポートは簡単なはず。

KODAMAR
質問者

お礼

回答ありがとうございます。 テーブル作成クエリを使うと、元のテーブルがそのまま 作成されてしまうのです。 検索した結果だけでテーブルを作成したい場合はどうしたらいいのでしょうか?