>クエリをVBAで操作・取得する[Excel2016]Excel2016の「クエリ」をデータベースのテーブルとして「VBA」でデータを取得してエクセルへ表示するサンプルです。クエリをVBAで操作するのは最初は無理かと思いましたが実現できました。※クエリ系のVBAには一部不具合がある可能性があります。(2015/10/8)事前準備(クエリの作成)図のようにエクセルに値を入力してください。次にA1からB4のセルを選択して「データ」タブの「テーブルから」でクエリを作成します。※クエリの作成方法の詳細は「テーブルからクエリ/クエリツールの使い方」をご覧ください。そのクエリの表の下あたりにVBAの「ボタン」(ActiveXコントロール)を作成します。Properties=""この接続文字列を確認するにはリボンの「データ」の「接続」を開きます。次に「プロパティ」を押して「定義」タブを押すと表示されます。接続文字列が同じなのが確認できますね。本来は「OLEDBConnection.ADOConnection」でデータを取得できるはずなのですが、現在では「ADOConnection」は空となっておりデータを取得する事はできません。するかと言いますと自力でADO接続します。ワークブック内のクエリ(データベース)に対してADO経由でデータを取得することになります。次はコードとなります。Sub結果まず、21行目の「Execute」メソッドで2-3分エクセルが固まります。※暗号化などのセキュリティの為か、非常に遅いです。「別のプログラムでのOLEの操作が完了するまで待機します。」というメッセージが表示されます。OKボタンを押すとVBAが実行されて次のようになります。D5からE6にクエリのデータが設定されていますね。ソースコードの解説ADOの基本操作は「データベース操作のまとめ」をご覧ください。※「Microsoft.Mashup.OleDb.1」は恐らくクエリ用のプロバイダなのかも知れません。DataSourceに$Workbook$と定義しても「接続を更新できませんでした。作成された場合に発生することがあります。」というエラーになります。24行目の「MoveNext」で次のレコードに進んでいます。よってデータの一行目が表示されません。この24行目の「MoveNext」を削除して実行すると「BOFとEOFのいずれかがTrueになっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。」というエラーが表示されます。adoRs.RecordCountBOFはFalse、EOFはFalse、レコード件数は-1と表示されます。BOF/EOFに異常なく、レコード件数はプロバイダやカーソルによっては-1と表示される為、3つの確認コードには異常がない事となります。24行目の「MoveNext」がないと実行できないのかは不明です。すると「バグ」なのかもしれません。supported」というエラーが発生します。SQLの実行をADODB.Connection.ExecuteではなくADODB.Recordset.Openで実行してその引数でカーソルの種類を動的、静的カーソルに切り替えても同様なエラーが発生しました。まとめクエリをデータベースのテーブルとしてVBAでアクセスすると・接続に2-3分かかる。・取得したレコードの一行目は取得できない。私のコードに誤りがない場合は、今後「バグ修正」により高速にアクセスして全てのレコードが取得できる可能性があります。(3)このブログについてオープンソースGitHubで複数のオープンソースを公開。Webアプリこのブログのマスターが作成した無料ツールです。(オープンソース)ブラウザで8/16/24/32bitの相互変換。Webの逆アセンブラブラウザでEXE/DLLファイルを逆アセンブルする※その他にも「プチラボ」でアプリを多数公開しています。3Dゲームこのブログのマスターが作成した無料ゲームです。短時間で遊べるファンタジーのオンラインRPG風ほのぼの癒し系のスマホアプリ※その他は「@ゲーム」で公開しています。※インストール不要でそのまま遊べます。スマートフォンこのブログのマスターが作成した無料アプリです。お主の画像減色お手軽にカメラの写真や画像を「高品質に減色」するお主は誰だ。(女性向け)ロボットこのブログのマスターが作成したロボットです。