8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

エクセルVBAでのレコードセットの運用について

Last updated at Posted at 2019-09-16

簡単な覚書ですが、誰かの役に立てれば幸いです。
ExcelとAccessの連携を取りたい時に色々調べた結果、便利そうなレコードセットという機能を発見しました。
#レコードセットについて
VBAの参照設定することで使える配列より勝手がいいかなと思う情報の集合体
イメージはテーブルを作っていくイメージ(と、いうか実際にテーブルとして扱われるのを無理やり扱ってるのかも)
#配列との違い
配列は1つの型のみ設定出来ますが、
レコードセットは各フィールド毎に型設定出来るので、次のようなデータを扱い時などに便利

No 名前 給料 住所
1 AAA 15円 熊本
2 BBB 20円 愛知

配列では、2次元配列を準備してなんとか入れる事は出来ますが、どこに何が入っているかが面倒

レコードセットでは
フィールドという箱を準備し、その中にデータを格納出来るのですごく便利です。
イメージは配列の箱ごとに名前を付けてあげるイメージ?

#実際の定義方法
参照設定で、"Microsoft ActiveX Data Object *** Library"を選択
(***はバージョンです。自分の環境だと6.1が最新でした)

あとはエクセルVBA内で

'追加
sub otamesi()
 dim Rs as new Adodb.Recordset
end sub
'ここまで

オブジェクトを定義し、好き勝手使えます。
(Rsは変数名なので、お好きにどうぞ)

#使い方
主に自分が使う機能を記載します
##フィールド定義
そもそも値を入れる箱を準備する必要がありますので、その対応を行います。

sub otamesi()
 dim Rs as new Adodb.Recordset

'追加
 with Rs.Fields
  .append "フィールド名", adVarChar, 65535
 End with
'ここまで
end sub

##解説

対象 説明
.append フィールド追加用のメソッド
"フィールド名" セットするフィールド名
adVarChar セットする型
65535 adVarCharは文字列型であり、文字数のセットが必須のため、65535文字入るよう設定(こんなに長くは要らないのでお好きに)
型などの制約は[MSDN](https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/append-method-ado
)の"Type"の項目を参照ください

#フィールド値設定
実際にフィールドに値を格納します

sub otamesi()
 dim Rs as new Adodb.Recordset

 with Rs.Fields
  .append "フィールド名", adVarChar, 65535
 End with

'追加
 Rs.Open
 with Rs
   .addnew
   !フィールド名 = "愛してるのさ君たちを!"
   .update
 End with
'ここまで

end sub

##解説
まずは値を入れたり、参照したりする際は"Open"必要なので忘れずに
当然使い終わった後に"Close"後、メモリ解放ください(マクロ終了時にメモリ解放されるみたいなので厳密にやる必要はないかもですが、アトゼキの気持ちでやりましょう)

対象 説明
.Open レコードセットを使いますよーという命令
.addnew 新しく情報登録しますよーという命令
!フィールド名 = "愛しているのさ君たちを!" 値を入れるフィールドを選択し、値をセット可能。文言はACの主任
.update 設定した値を登録レコードセットに登録してねという命令
"Rs!フィールド名"で指定のフィールド名を参照できます
具体的な内容自体はMSDNにありますので、以下を参照ください
Open:R/W許可
Addnew:新規レコード追加時に呼び出し必要
Update:レコードセット更新

#ワークシートへの出力
これが一番簡単だと思います

sub otamesi()
 dim Rs as new Adodb.Recordset

 with Rs.Fields
  .append "フィールド名", adVarChar, 65535
 End with

 Rs.Open
 with Rs
   .addnew
   !フィールド名 = "愛してるのさ君たちを!"
   .update
 End with

'追加
 Rs.MoveFirst
 Range("A1").CopyRecordset(Rs)
'ここまで

end sub

#解説

対象 説明
.MoveFirst レコードセット一覧の一番初めに戻してねという命令
Range("A1").CopyRecordset(Rs) 現在開かれているワークシートのレンジA1を起点にレコードセットの内容をコピペしてねという命令

#終わりに
正直ここまで書くのに2時間かかったので、続きは次回・・・

8
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?