【VBA】Recordset

参照設定

Microsoft ActiveX Data Objects 2.8 Libraryを追加
f:id:vist764:20210904220251p:plain:w300

基本

    Dim rs As New ADODB.Recordset
        
    'フィールドを設定
    With rs.Fields
        .Append "ID", adInteger, 4
        .Append "名前", adVarWChar, 20, adFldIsNullable 'Null許可
        .Append "年齢", adInteger
        .Append "生年月日", adDate
    End With
    
    rs.Open '表へのアクセスを利用可能にする
    
    On Error GoTo Err
    
    '値を登録(1件目)
    rs.AddNew
    rs("ID") = 1
    rs("名前") = "高橋"
    rs("年齢") = 31
    rs("生年月日") = "2018 / 11 / 23 10:11:12"
    rs.Update  '登録を確定
    
    '値を登録(2件目)
    With rs
        .AddNew
        !ID = 2
        !名前 = Null 'Emptyでも可
        !年齢 = 19
        !生年月日 = #11/23/2018 10:11:00 PM#
        .Update  '登録を確定
    End With
    
    '1レコードずつ処理
    rs.MoveFirst
    Do Until rs.EOF
        Debug.Print rs!名前
        rs.MoveNext
    Loop
    
    'セルに張り付け
    rs.MoveFirst       '最初の行へ移動
    Range("A1").CopyFromRecordset rs
    
    '二次元配列に格納
    Dim arry As Variant
    rs.MoveFirst       '最初の行へ移動
    arry = rs.GetRows

Finally:
    rs.Close: Set rs = Nothing
    Exit Sub

Err:
    MsgBox "エラー番号:" & Err.Number & vbCrLf & "エラー内容:" & Err.Description, vbOKOnly + vbCritical
    Resume Finally

フィールド

名前 説明
adInteger 整数型
adVarChar 文字列・全角が2桁
adVarWChar 文字列・最長255桁・全角が1桁
adDouble 浮動小数
adDate 日付型
adBoolean Yes|No型

ソート

ASCで昇順(省略可)、DESCで逆順

    rec.Sort = "ID, 名前"
    rec.Sort = "ID, 名前 DESC"
    '解除
    rec.Sort = ""

フィルター

    rec.Filter = "名前='高橋' AND 生年月日 = 1988/11/09"
    rec.Filter = "名前 Like '%高*'"
    rec.Filter = "ID >= 2"
    '解除
    rec.Filter = ""        

検索

    rec.Find ("ID = 2")

ブックマーク

カーソルが指している行位置を保存できる

    Dim bm As Variant
    '保存
    bm = rec.Bookmark
    '呼出
    rec.Bookmark = bm