こんばんは。
色々調べたのですが、ExcelVBAでAccessのクエリをだインポートするやり方がわかりません。
↓下記のやり方でクエリを指定すると、SELECTなどの指定がないといわれます。
http://dqn.sakusakutto.jp/2008/05/vbaaccessexcel …
下記のやり方で
http://www.asahi-net.or.jp/~ef2o-inue/kihon/sub0 …
→『ADOでデータを取得する。』で上手くいきそうなのですが、
テーブルのインポートはできても抽出部分が入れられません。
AccessのSQL文コピーし、strSQL="SELECT"の部分に
貼り付け、""でくくり、""部分は、''に置き換え、最後の;を消しました。
SQL部分にSELECT~としたのですが、1行に収まらず、自動改行がかかってしまい、1行目の最終に"が自動でついてしまい、
HAVING以降のAND((T_受付表.分類2)) In('優','普','')などの抽出条件がエラーになってしまいます。
VBAの通常改行 _も入れてみたのですが、えらーになってしまいます。
『 DAOでフィールドを個々に指定して読み込む』
で再度SQLを指定してやってみたところ、SELECT部分のみにすると、選択条件の入っていない、テーブルのデータインポートは上手くいくのですが、どうしても条件がいれられません。
どうしたらよいのでしょうか。
チラッと探したところ、クエリはインポートできないなどのご意見があったのですが、実際のところどのようにしたら良いのでしょうか。
宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
sql文が原因のようですね。
パラメーター文は何のためでしょうか?
抽出条件ならwhere文に(T_受払表.売上げ月=売上げ月)が無いので意味がないと思います。
VBAで行う場合は別にInput文やフォーム、セルなどに入力させておきそれを使って
sql文に where T_受払表.売上げ月=" & 売上げ月 & ";" '数字型の場合
where T_受払表.売上げ月='" & 売上げ月 & "';" '文字型の場合
などとするほうが普通の方法のようです。
こういう場合問題を見つける手順として
SQL文を単純にして問題ないか調べる
そこで問題があれば、そこを修正する、なければSQL文のデバッグをする。
SQL文についてはaccessでダミーでクエリーを作りその表示をSQLにしてそこにここで作ったSQL文を貼り付けて保存。(この時点でエラーが出るかもしれない)
そのSQLを実行してみるという方法でSQL文のデバッグができます。
>クエリはインポートできないなどのご意見
問題なくできます。
「クエリーの結果をレコードセットで受ける」わけですから
その後レコードセットをセルに転記する。
教えていただいた問題を見つける方法で、
手順をおってやってみたところ、
inputboxからの変数の引継ぎが上手くいってないことがわかり
パラメータの代わりに使用することが出来ました。
また、この記述が問題解決の大きな鍵になりました。
where T_受払表.売上げ月=" & 売上げ月 & ";" '数字型の場合
where T_受払表.売上げ月='" & 売上げ月 & "';" '文字型の場合
2ヶ月位なやんでいた問題だったので、すっきりしました。
ありがとうございました。
No.1
- 回答日時:
Excel VBAでのSQL文を提示してみてください。
ついでにその周りの関係するコードも提示されると回答が得られやすいと思います。
この回答への補足
↓このコードでテーブルを指定すると出来るのですが、クエリを指定するとなぜか出来ないのです。
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/sub0 …
*******************************************************************************
' 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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- Access(アクセス) access フォーム 大分類、小分類 1 2022/08/11 18:03
- Access(アクセス) スキルシートのエクセルの項目に 2 2023/04/04 22:41
- Access(アクセス) Access DAOのExecuteメソッドのオプション(RecordsetOptionEnum)に 1 2022/09/19 07:34
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データがあれば○○なければのSQL
-
Access vbaで重複レコードの削...
-
ACCESS VBAでテーブル内の特定...
-
別のaccessファイルからデータ...
-
ACCESSのクエリ、SQLに変数を使...
-
ACCESSで実行時エラー3008
-
sql文で削除クエリを書く
-
ACCESSで購入回数を表示する方...
-
抽出条件でデータ型が一致しま...
-
ACCESS DCOUNTの抽出条件について
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
CloseとDisposeの違い
-
switch の範囲指定
-
VBAでループ内で使う変数名を可...
-
エクセルVBAで、MsgBox やInput...
-
Excelシート上のマクロを登録し...
-
【Excel】特定の文字を含むセル...
-
VBの質問#if 0 then ってどう...
-
DoEventsがやはり分からない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データがあれば○○なければのSQL
-
【access】複数のフィールドの...
-
ACCESS VBAでテーブル内の特定...
-
Access vbaで重複レコードの削...
-
ACCESS DCOUNTの抽出条件について
-
Accessで縦と横を入れ替えたい
-
VBAでテーブル名とカラム名を動...
-
DataGridViewで複数条件の抽出...
-
Access から Excelのシートをイ...
-
重複した複数のレコードを1レ...
-
DAOでSQLServerに接続し、LeftJ...
-
SQLServer→Access インポート
-
ACCESSで実行時エラー3008
-
sql文で削除クエリを書く
-
別のaccessファイルからデータ...
-
access追加クエリーでform入力...
-
抽出条件でデータ型が一致しま...
-
Accessリンクするテーブルが見...
-
【PHP/MySQL】コード上で生成...
-
社員名簿から検索する関数
おすすめ情報