質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

5530閲覧

VBAでrecordset(ADO)の結合方法

cookie618

総合スコア2

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/10/06 14:11

前提・実現したいこと

Access等からリンクさせないで、VBA内で自作した複数のrecordsetを
特定のキー(NO)において結合したrecordsetを新たに作成したい
期待する出力;
1 999 99
2 555 55
3 333 33

発生している問題・エラーメッセージ

実行時エラー'3709': この操作を実行するために接続を使用できません。このコンテキストで閉じているかあるいは無効です。

該当のソースコード

VBA

1Dim test1 As New ADODB.Recordset 2test1.Fields.Append "NO", adDouble 3test1.Fields.Append "ItemA", adDouble 4test1.Open 5test1.AddNew 6test1!NO = 1: test1!ItemA = 999 7test1!NO = 2: test1!ItemA = 555 8test1!NO = 3: test1!ItemA = 333 9Dim test2 As New ADODB.Recordset 10test2.Fields.Append "NO", adDouble 11test2.Fields.Append "ItemB", adDouble 12test2.Open 13test2.AddNew 14test2!NO = 1: test2!ItemB = 99 15test2!NO = 2: test2!ItemB = 55 16test2!NO = 3: test2!ItemB = 33 17Dim testjoin As New ADODB.Recordset 18testjoin.Open "SELECT test1.NO, test1.ItemA,test2.ItemB FROM test1 INNER JOIN test2 ON test1.NO = test2.NO;" 19testjoin.MoveFirst 20Debug.Print testjoin!NO, testjoin!ItemA, testjoin!ItemB: testjoin.MoveNext 21Debug.Print testjoin!NO, testjoin!ItemA, testjoin!ItemB: testjoin.MoveNext 22Debug.Print testjoin!NO, testjoin!ItemA, testjoin!ItemB: testjoin.MoveNext

試したこと

testjoin.Open行のSQL文をいろいろ試したが改善せず

補足情報(FW/ツールのバージョンなど)

Excelバージョン2008

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そもそもRecordsetの操作はSQLではできません。
Recordset オブジェクトのプロパティ、メソッド、およびイベント
SQLのselectと似たような事なら、精々FilterやFindメソッドあたりだと思います。

Excelシートをテーブルとして扱うのならSQLでSELECT出来ますが。
以下参考
Power Query(パワークエリ)とはどんな機能か?活用の流れや手順、使い方まとめ
Excelの集計をSQLでおこなう方法。VLOOKUP()やSUBTOTAL()の限界を超えろ!!
EXCEL VBAでSQL文を使って集計する

投稿2020/10/06 14:28

編集2020/10/07 00:45
sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cookie618

2020/10/06 14:34

実際には1:Nで結合した表を扱いたいので、FilterやFindでの対応に限界を感じていたので質問させていただきました。ありがとうございます。
sazi

2020/10/06 14:43 編集

リンクを追記しました。joinもできますよ。
sousuke

2020/10/07 00:38

一応MSDataShapeでadChapter型の子レコードセットを列値として持つことは可能です。 スタンドアロンレコードセットを直接連結はたぶん不可能ですが。 これ使ってる人見たことないです…と思ったらやっぱり削除予定になってて悲しい。 https://docs.microsoft.com/ja-jp/sql/ado/guide/appendixes/microsoft-data-shaping-service-for-ole-db-ado-service-provider?view=sql-server-ver15 https://foolexp.wordpress.com/2011/12/18/msdatashape-%e3%81%9d%e3%81%ae2/
sazi

2020/10/07 00:48 編集

リンクを追記しました。標準でSQLが扱えそうです。 @sousukeさん データタブでデータソースを指定して利用できるようになったからでしょうね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問