0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Access VBAにおけるADOについて【データベース接続方法】

Last updated at Posted at 2025-07-30

ADOは「ActiveX Data Object」の略で、データベースを操作するためのさまざまなオブジェクトを持つオブジェクトライブラリです。ADOの持つさまざまなオブジェクトを組み合わせることで、データベースを自由に操作することができます。
SQL Server、Oracle、Excelファイルなど、Access以外の外部データベースも同様に操作が可能となります。

本記事では主に、データベースへの接続方法に絞って解説していきます。

データベース操作の主な流れ

  1. データベースに接続する
  2. レコードの取得を行う
  3. 取得したレコードへの検索や追加・更新・削除など、データベースの操作を行う
  4. データベースへの接続を解除する

※AccessでADOを利用するには、「参照設定」ダイアログボックスで「Microsoft ActiveX Data Objects X.X Library」(X.Xはバージョン番号)への参照設定が必要です。

ADOで使用するオブジェクト

ADOでは主に次のオブジェクトによって構成されています。

オブジェクト名 説明
Connection データベースへの接続を保持するオブジェクト
Command データベースへのコマンドを保持するオブジェクト
Recordset レコードの集まりを保持するオブジェクト
Field フィールドを保持するオブジェクト
Parameter パラメータを保持するオブジェクト
Property プロパティを保持するオブジェクト
Error エラーを保持するオブジェクト

データベース接続で使用するオブジェクト

Connectionオブジェクト

Connectionオブジェクトはデータベースへの接続を保持するオブジェクトです。Connectionオブジェクトの主なプロパティとメソッドは、以下となります。

プロパティ 説明
ConnectionString データベースへの接続情報を返す
State データベースへの接続状態を返す
(※接続している場合は「adStateOpen」
接続していない場合は「adStateClosed」を返す)
メソッド 説明
Open レコードの集まりを保持するオブジェクト
Close フィールドを保持するオブジェクト
Execute パラメータを保持するオブジェクト
BeginTrans トランザクションを開始する
CommitTrans 変更を保存してトランザクションを終了する
RollbackTrans 変更を取り消してトランザクションを終了する

データベースへの接続

データベースに接続するには、ConnectionオブジェクトのConnectionStringプロパティに「接続文字列」を設定します。ただし、カレントデータベースに接続する場合は、CurrentProjectオブジェクトのConnectionプロパティを使用するため、接続文字列は必要ありません。

アクセスファイルへの接続

例. カレントデータベースに接続する場合

Function ConnectToCurrentDb()
    Dim cn As ADODB.Connection
    Set cn = CurrentProject.Connection
    
    Select Case cn.State
    Case adStateOpen
        MsgBox "データベースに接続しています。"
    Case adStateClosed
        MsgBox "データベースに接続していません。"
    End Select
   
    Set cn = Nothing
End Function

例. カレントデータベース以外に接続する場合

Function ConnectToOtherDb()
    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection
    cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Data\sample.accdb;"
    cn.Open

    Select Case cn.State
    Case adStateOpen
        MsgBox "データベースに接続しています。"
    Case adStateClosed
        MsgBox "データベースに接続していません。"
    End Select
    
    cn.Close
    Set cn = Nothing
End Function

カレントデータベース以外に接続する場合は、cn.Open(cn.Close) の処理を入れる必要があります。

あらかじめConnectionStringプロパティに接続文字列を設定していなくても、以下のようにOpenメソッドの第1引数に直接、接続文字列を指定することでデータベースに接続できます。

例. カレントデータベース以外に接続する場合(ConnectionStringプロパティで接続文字列を設定しない)

Function ConnectToOtherDb()
    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Data\sample.accdb;"

    Select Case cn.State
    Case adStateOpen
        MsgBox "データベースに接続しています。"
    Case adStateClosed
        MsgBox "データベースに接続していません。"
    End Select
    
    cn.Close
    Set cn = Nothing
End Function

外部データベースファイルへの接続

例. CSVファイルに接続

Function ConnectToCSV()
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = New ADODB.Connection

    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=C:\Data;" & _
            "Extended Properties='text;HDR=Yes;FMT=Delimited';"
    Set rs = cn.Execute("SELECT * FROM test.csv")

    Do Until rs.EOF
      MsgBox rs.Fields(0) + rs.Fields(1) + rs.Fields(2) + rs.Fields(3)
      rs.MoveNext
    Loop

    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing
End Function

「Data Source」には接続するCSVファイルが保存されているフォルダのパスを「フォルダのパス」+「\」の形式で記述します

例えば、Cドライブのルートフォルダにあるなら「C:\」を、CドライブのTESTという名のフォルダにあるなら「C:\TEST」をそれぞれ記述します。

以下のように、CurrentProject.Pathを変数に入れて設定することで、カレントデータベースのあるフォルダのパスを指定することができます。変数に入れることで後からパスのみ変更する場合も分かりやすくなります。

Dim MyPath As String
MyPath = CurrentProject.Path & "\"
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & MyPath & ";" & _
            "Extended Properties='text;HDR=Yes;FMT=Delimited';"

次に、ConnectionオブジェクトのExecuteメソッドを使用してオブジェクト変数にレコードセットを格納します。

Set rs = cn.Execute("SELECT * FROM test.csv")

FROM句の後に「ファイル名.拡張子」の形式で記述します。(「ファイル名#拡張子」と記述しても同様に動作します)

Openメソッドの引数として渡していた接続文字列の設定を、以下のようにあらかじめConnectionオブジェクトのプロパティとして設定することも可能です。

cn.Provider = "Microsoft.ACE.OLEDB.12.0"
cn.Properties("Extended Properties") = "text;HDR=Yes;FMT=Delimited"
cn.ConnectionString = "C:\Data"
cn.Open

HDR=YESとすることで、1行目をヘッダーとして扱うようになります(NOの場合は1行目をデータとして扱います)。

カンマ区切り形式のデータであれば、拡張子が「txt」のテキストファイルでも、同様に外部データベースとして利用することができます。

例. Excelファイルに接続

Function ConnectToExcel()
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = New ADODB.Connection

    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=C:\Data\test.xlsx;" & _
            "Extended Properties='Excel 12.0 Xml;HDR=YES';"
    Set rs = cn.Execute("SELECT * FROM [Sheet1$]")

    Do Until rs.EOF
      MsgBox rs.Fields(0) + rs.Fields(1) + rs.Fields(2) + rs.Fields(3)
      rs.MoveNext
    Loop

    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing
End Function

「Data Source」には接続するExcelファイルのパスを記述します。

例えば、Cドライブのルートフォルダにある「test.xlsx」という名前のファイルなら「C:\test.xlsx」を、CドライブのTESTという名のフォルダにあるなら「C:\TEST\test.xlsx」をそれぞれ記述します。

次に、ConnectionオブジェクトのExecuteメソッドを使用してオブジェクト変数にレコードセットを格納します。

Set rs = cn.Execute("SELECT * FROM [シート名$]")

FROM句の後に対象となるワークシート名を「[シート名$]」の形式で記述します。
例えば「Sheet1」という名前のワークシートのデータをレコードセットに取得する場合、「[Sheet1$]」と記述します。

レコードセットを取得するとき、WHERE句を使用してレコードを抽出することができます。ただし、接続文字列の「Extended Properties」で「HDR」の設定を「YES」に設定している場合と「NO」に設定している場合とで抽出条件の指定の仕方が変わってきます

(「HDR」の設定を「YES」に設定)

  • CSVファイル
SELECT * FROM ファイル名.拡張子 WHERE フィールド名 = 
  • Excelファイル
SELECT * FROM [シート名$] WHERE フィールド名 = 

(「HDR」の設定を「NO」に設定)

  • CSVファイル
SELECT * FROM ファイル名.拡張子 WHERE 列番号 = 
  • Excelファイル
SELECT * FROM [シート名$] WHERE 列番号 = 

「HDR」の設定を「NO」に設定している場合、フィールド名を使って抽出条件を指定することはできません。

そのため、列番号 = 値と指定します。「列番号」には、抽出条件に指定するフィールドを「F+番号」といった形式で記載します。

例えば、1列目を抽出対象とするなら F1 = 値、2列目を抽出対象とするなら F2 = 値 とします。

まとめ

本記事では、Access VBAにおけるADOについて、データベースへの接続をメインに説明してきました。

ADOではAccessの内部ファイルのみならず、CSVファイルやExcelファイルといった外部ファイルへのアクセスも可能となります。

接続の際の記載が多少違う部分もありますが、基本的にはどのデータベースファイルでも同様な操作が可能となります。

参考文献

  • VBA エキスパート 公式テキスト 「Access VBA スタンダード」 武藤 玄
0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?