- ベストアンサー
Access2000VBAでテーブルの内容を抽出して新しいテーブルを作成する方法
- Access2000VBAで、開いているデーターベースのテーブルから抽出条件を指定してSQLを使用してデータを抽出し、新しいテーブルを作成する方法を知りたいです。
- DAOを使用して、SQLでテーブルから必要な条件をセットし、レコードセットに格納することはできますが、そのまま新しいテーブルに作成してデータを格納する方法はありません。
- AccesVBAに詳しい方に助言を求めています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
補足拝見しました。 やりたいことは、「テーブル作成クエリ」をVBA中で実行したいんですよね。 試しに、実際にテーブル作成クエリを作ってみまして、それをSQLビューにすると、以下のようになるはずです。 SELECT [0111ITMZ].* INTO 作成するテーブル名 FROM 0111ITMZ WHERE ((([0111ITMZ].M_HBCOD2)>="5000" And ([0111ITMZ].M_HBCOD2)<"6000")); -+-+-+-+-+-+ ちょっと見難いので簡略化して、こんな感じ。 SELECT * INTO 作成するテーブル名 FROM 0111ITMZ WHERE M_HBCOD2 >= '5000' And M_HBCOD2 < '6000'; 試しに上記をクエリのSQLビューにコピー,貼り付けして、実行してみて下さい。([!]のアイコン) 正常にテーブルが作成されることが確認できたと思います。 -+-+-+-+-+-+ これをVBAで書くとすると、以下のようになります。 変数 = "SELECT * INTO 作成するテーブル名" _ & " FROM 0111ITMZ" _ & " WHERE M_HBCOD2 >= '5000'" _ & " And M_HBCOD2 < '6000';" -+-+-+-+-+-+ で、このVBA中の、「5000」と「6000」をフォームに入力した値で置き換えたいわけです。 フォーム[条件フォーム]上に、二つのテキストボックス[コード開始]と[コード終了]があるとします。 この場合、以下のように書きます。 変数 = "SELECT * INTO 作成するテーブル名" _ & " FROM 0111ITMZ" _ & " WHERE M_HBCOD2 >= '" & Forms("条件フォーム")![コード開始] & "'" _ & " And M_HBCOD2 < '" & Forms("条件フォーム")![コード終了] & "';" これで、変数の中にフォームを参照したSQLが入る筈です。 -+-+-+-+-+ あとはこのSQLを実行すればいいだけですので、Currentdb.Executeで、実行します。こんな感じ。 変数 = "SELECT * INTO 作成するテーブル名" _ & " FROM 0111ITMZ" _ & " WHERE M_HBCOD2 >= '" & Forms("条件フォーム")![コード開始] & "'" _ & " And M_HBCOD2 < '" & Forms("条件フォーム")![コード終了] & "';" Currentdb.Execute SQL -+-+-+-+ 残るは誤入力対策ですね。テキストボックスに数値以外を入れればエラーになるようにするのでしたら、 If IsNumeric(Forms("条件フォーム")![コード開始]) = False Then MsgBox "[コード開始]には数値を入力してちょ☆" Exit Sub End If If IsNumeric(Forms("条件フォーム")![コード終了]) = False Then MsgBox "[コード終了]には数値を入力してちょ☆" Exit Sub End If 変数 = "SELECT * INTO 作成するテーブル名" _ & " FROM 0111ITMZ" _ & " WHERE M_HBCOD2 >= '" & Forms("条件フォーム")![コード開始] & "'" _ & " And M_HBCOD2 < '" & Forms("条件フォーム")![コード終了] & "';" Currentdb.Execute SQL ってな感じにします。(実際に作成するときには、こんなふざけたメッセージを表示させてはいけません(笑)) -+-+-+-+ 尚、このVBAを条件フォームに配置したボタンなどから実行させるのでしたら、「Forms("条件フォーム")!」の部分を、「Me.」に置き換えても構いません。 If IsNumeric(Me.コード開始) = False Then MsgBox "[コード開始]には数値を入力してちょ☆" Exit Sub End If If IsNumeric(Me.コード終了) = False Then MsgBox "[コード終了]には数値を入力してちょ☆" Exit Sub End If 変数 = "SELECT * INTO 作成するテーブル名" _ & " FROM 0111ITMZ" _ & " WHERE M_HBCOD2 >= '" & Me.コード開始 & "'" _ & " And M_HBCOD2 < '" & Me.コード終了 & "';" Currentdb.Execute SQL -+-+-+-+-+ 尚、ここまで書いといて何ですが、実際にAccessを使わずに頭の中だけで作っています。(横着モード) コード自体には問題はないはずですが、スペルミスや、括弧の閉じ忘れ等あるかもしれません。 何か問題があるようでしたら、補足欄にその旨お書きください。 でわ! P.S. セミコロンは、SQLの一番最後につけます。SQLの終了を示すためのマークなのです。
その他の回答 (2)
- ARC
- ベストアンサー率46% (643/1383)
訂正です(^^; Currentdb.Execute SQL となっている行を全て、 Currentdb.Execute 変数 と置き換えてお読みください。 でわでわ
- ARC
- ベストアンサー率46% (643/1383)
つまり、入力フォームを作成して、それを参照して、SQLを組み立て、 set RS = currentdb.OpenRecordset(SQL) などとして、レコードセットを作成するところまでは出来ている、と解釈してもよろしいですか? で、それを新規テーブルにコピーするのですが、 現在、 SELECT ○○ FROM △△ WHERE □□; ってなSQLが出来ていると思います。 これに少し加工をしまして、 SELECT ○○ INTO 新規テーブル名 FROM △△ WHERE □□; ってなSQLを作成してください。 んで、 Currentdb.Execute SQL などとして、このSQL を実行してください。 尚、既に同名のテーブルがある場合は、そのテーブルを一旦削除した後、新たにテーブルが作成されます。 これで分かりますでしょうか? も少し具体的な回答も書きたかったのですが、どういう風にSQLを組み立ててらっしゃるのかがちと不明でしたので… より詳しい回答をご所望でしたら、SQLを組み立てている部分のコードを、補足にでも書いていただければ幸いです。
補足
こんにちは アドバイス感謝いたします。。 やりたいことは下記のようなSQL記述です。 SELECT [0111ITMZ].* FROM 0111ITMZ WHERE ((([0111ITMZ].M_HBCOD2)>="5000" And ([0111ITMZ].M_HBCOD2)<"6000")); そしてフォームから入力する内容はWHERE句の"5000"と"6000"の部分です。 この部分を変数にしてデータ抽出したいのですが。 また上記のSQL記述はAccessのSQLビューから持ってきた記述ですが、 VBAでこの内容を記述する時には 変数="SELECT [0111ITMZ].*"_ & "FROM 0111ITMZ;"_ & "WHERE ((([0111ITMZ].M_HBCOD2)>="5000" And ([0111ITMZ].M_HBCOD2)<"6000"));" などのように" "でくくってあげればよろしいでしょうか。 またセミコロンをどこでつければいいのかはっきり理解していないレベルなものでして。 いろいろご面倒おかけしますが、よろしくお願いいたします。