VBAにて、SQLの結果でえられたレコードを
Do Until レコード.EOF
でループ処理で
配列型の変数に
レコードの中の指定した項目をセットしていくには
どう記述したらよろしいでしょうか。
レコード!指定項目名
を配列にセットする。
よろしくお願いいたします
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
自己解決
受付期間が長すぎましたので、完了します。
投稿2022/06/14 06:59
総合スコア70
0
GetRowsメソッドで一発で配列を取得できますが、それではだめでしょうか。
GetRows メソッド (ADO) - ActiveX Data Objects (ADO) | Microsoft Docs
投稿2021/12/16 08:18
総合スコア34362
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
ご回答くださり大変ありがとうございます!
早速試してみます。GetRowsは、項目指定できないのでしょうか。
もちろん調べながら実行してみますが、すぐにわかればと思い質問を投げさせていただきます。
レコードセットをSQLで開くと思いますが、そのときに必要なフィールドだけにすればいいでしょう。
そもそも、データベースなら、わざわざ配列にしなくても強力なデータ操作機能をもっています。
何のために配列にしたいのでしょうか。その目的を提示していただけたら、適切なアドバイスが得られると思います。
引き続きありがとうござます。
目的は、エクセル出力するときに、この配列ごとにシート作成しシート名をつけることです。
配列にする理由は、
リストボックスが選択された場合は、項目名.ItemsSelected.Count
未選択の場合は、この項目のマスタより全データをセットします。rs!項目名
これらを選択、未選択のケースで
同じ配列変数を利用してループさせるためです。
ちなみに、実現させたいことは
シートごとの出力ですので、配列によるループでなくても
ご提案があればと存じます。
選択ありなしで、下記のループ記述で分けています。
変数の宣言については省略してしまいますが・・・
リスト選択あり:For Each var In リスト.項目.ItemsSelected
選択なし:Do Until rs.EOF
エクセルシートへの出力なら、配列に入れなくても、CopyFromRecordsetメソッドでレコードセットから直接シートへ出力できます。
Range.CopyFromRecordset メソッド (Excel) | Microsoft Docs
https://docs.microsoft.com/ja-jp/office/vba/api/excel.range.copyfromrecordset
For Each var In リスト.項目.ItemsSelected で選択した項目名が取得できてますので、
それをもとにSQL文のSELECT句を生成して、それを元にレコードセットを作ればいいでしょう。
SQL文が分からない、VBAでの生成法が難しいというのなら、すべての項目をCopyFromRecordsetでシートに出力して、そこで列を削除してもいいでしょう。
.ItemsSelectedが使えるということは、AccessのVBAでしょうか。Accessからエクセルのシートへ出力したいという話でしょうか。そうなると、また、話が変わってきます。
レコードセットを生成する必要すらなくなります。
DoCmd.TransferSpreadsheet でテーブルやクエリを直接エクセルに出力できますので。
下記に、リストボックスでフィールドを選択して、CSVやエクセルに出力するサンプルがおいてあります
テーブルのフィールドを指定してエクスポート - hatena chips
https://hatenachips.blog.fc2.com/blog-entry-125.html
大変ご丁寧に回答くださりありがとうございます。
ACCESSのVBAです。
一旦、いただいた回答をもとにトライしてみます。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。