• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBAでAccessクエリのインポート方法について)

ExcelVBAでAccessクエリのインポート方法とは?

このQ&Aのポイント
  • ExcelVBAでAccessのクエリをインポートする方法がわかりません。いくつかの方法を試しましたが、上手くいきません。
  • クエリの指定方法やインポートの際にエラーが発生してしまいます。どうすれば解決できるでしょうか。
  • 探した限りでは、クエリのインポートは難しいという意見がありますが、正しい方法を知りたいです。

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

  • ベストアンサー
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

sql文が原因のようですね。 パラメーター文は何のためでしょうか? 抽出条件ならwhere文に(T_受払表.売上げ月=売上げ月)が無いので意味がないと思います。 VBAで行う場合は別にInput文やフォーム、セルなどに入力させておきそれを使って sql文に where T_受払表.売上げ月=" & 売上げ月 & ";"  '数字型の場合 where T_受払表.売上げ月='" & 売上げ月 & "';"   '文字型の場合 などとするほうが普通の方法のようです。 こういう場合問題を見つける手順として SQL文を単純にして問題ないか調べる そこで問題があれば、そこを修正する、なければSQL文のデバッグをする。 SQL文についてはaccessでダミーでクエリーを作りその表示をSQLにしてそこにここで作ったSQL文を貼り付けて保存。(この時点でエラーが出るかもしれない) そのSQLを実行してみるという方法でSQL文のデバッグができます。 >クエリはインポートできないなどのご意見 問題なくできます。 「クエリーの結果をレコードセットで受ける」わけですから その後レコードセットをセルに転記する。

mugigohan
質問者

お礼

教えていただいた問題を見つける方法で、 手順をおってやってみたところ、 inputboxからの変数の引継ぎが上手くいってないことがわかり パラメータの代わりに使用することが出来ました。 また、この記述が問題解決の大きな鍵になりました。 where T_受払表.売上げ月=" & 売上げ月 & ";"  '数字型の場合 where T_受払表.売上げ月='" & 売上げ月 & "';"   '文字型の場合 2ヶ月位なやんでいた問題だったので、すっきりしました。 ありがとうございました。

その他の回答 (1)

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.1

Excel VBAでのSQL文を提示してみてください。 ついでにその周りの関係するコードも提示されると回答が得られやすいと思います。

mugigohan
質問者

補足

↓このコードでテーブルを指定すると出来るのですが、クエリを指定するとなぜか出来ないのです。 Sub get_data() Dim myPath As String Dim myProvider As String Dim mySrc As String myPath = "C:\~\サンプル.mdb" myProvider = "Provider=Microsoft.Jet.OLEDB.4.0;" mySrc = "Data Source=" & myPath & ";" Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open myProvider & mySrc rs.Open "テーブル名またはクエリ名", cn Range("a1").CopyFromRecordset rs End Sub そして、下記のやり方で項目名や名前を短くしてSQL文を短くして出来たのですが、いったいstrSQL = ""の間の改行はどのようにしたら良いのでしょうか。私の場合は途中で改行すると末尾に自動で""がついてしまいます。 それともうひとつやりたいことは、アクセスならパラメーターでその月のデータの抽出をさせるところを、Excelのインプットボックスでその月を入力させて抽出したいのですが、どうしたらよいでしょうか。 宜しくお願い致します。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_030.html ******************************************************************************* ' ADOでAccessデータベースからデータをシート上に展開する ' ' 作成者:井上治 URL:http://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!] '******************************************************************************* Option Explicit Const cnsADO_CONNECT1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Const cnsADO_CONNECT2 = "\DB\SAMPLE.mdb;" '******************************************************************************* ' ADOでフィールドを個々に指定して読み込む '******************************************************************************* Sub TEST5() ' 参照設定「Microsoft Active Data Object 2.x Library」 Dim dbCon As New ADODB.Connection Dim dbRes As New ADODB.Recordset Dim dbCols As ADODB.Fields Dim strSQL As String Dim GYO As Long ' 画面描画更新停止 Call GP_StopSCUPD Worksheets("Sheet1").Activate ' 接続を確立する dbCon.Open cnsADO_CONNECT1 & ThisWorkbook.Path & cnsADO_CONNECT2 ' テーブル名,条件を指定してレコードセットを取得する strSQL = "PARAMETERS 売上げ月 Value;SELECT T_受払表.売上げ月, T_受払表.業務ID, Left([業務ID],5) AS manth業務ID, T_受払表.業務名, T_受払表.業種, T_部門名.部門名, T_受払表.分類1, T_受払表.分類2, T_受払表.チーム名, T_受払表.売上げ, T_受払表.原価, T_受払表.工数, T_受払表.委託作業費, T_受払表.仕入れ金, T_受払表.当月原価_振替, T_受払表.当月原価_労務費, T_受払表.当月原価_直接経費, T_受払表.不一致 FROM T_受払表 INNER JOIN T_部門名 ON T_受払表.部門コード = T_部門名.部門コード WHERE (((T_受払表.業務名)='製品') AND ((T_受払表.分類2) In ('長','年','')))" dbRes.Open strSQL, dbCon, adOpenKeyset, adLockReadOnly GYO = 1 Rows("2:65536").ClearContents ' 先頭レコードからEOFまで繰り返す dbRes.MoveFirst ' ←この行はなくても問題なし Do Until dbRes.EOF ' 行の変数を加算し必要項目を選択してセルにセット GYO = GYO + 1 Set dbCols = dbRes.Fields '↓ここは本番では変えました。 Cells(GYO, 1).Value = dbCols("西暦年").Value Cells(GYO, 2).Value = dbCols("開催順SEQ").Value Cells(GYO, 3).Value = dbCols("決勝開催日").Value Cells(GYO, 4).Value = dbCols("GP名").Value Cells(GYO, 5).Value = dbCols("開催地").Value ' 次のレコードに移る dbRes.MoveNext Loop ' レコードセット、データベースを閉じる dbRes.Close Set dbRes = Nothing dbCon.Close Set dbCon = Nothing ' 画面描画更新復帰 Call GP_StartSCUPD End Sub

関連するQ&A