みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAからAccessデータベースを操作する方法についてシリーズでお伝えしています。
前回は最初の記事ということでコチラ。
エクセルVBAとAccessを連携するメリットと注意点についてお伝えしました。
さて、今回からいよいよ実際にエクセルVBAからAccessデータベースに接続をしていきたいと思います。
接続をして切断するだけの超簡単プログラムです。
では行ってみましょう!
目次
Accessデータベース内にテーブルを準備
まずはAccessでこんなテーブルをを作ってみました。
都道府県ごとの面積や人口、区市町村数などをまとめたデータです。テーブル名は「データ」という名前です。
このテーブルを含むAccessデータベースファイルを「test.accdb」というファイル名で、今回のエクセルVBAを記述したファイルと同じフォルダに格納しました。
エクセルVBAからこのデータベースへの接続を試みていきます。
ADODB.Streamオブジェクトでデータベースに接続する
Accessデータベースと接続をしてやり取りをする際には、ADODB.Connectionオブジェクトを使います。
ADODB…?どこかで聞いたような名前ですね…
ADOはActiveX Data Objectsの略で
ADOとは、Microsoftが提唱しているデータアクセス技術のことである。
引用:Weblio辞書-ADO
ADOはその目的によりさらにいくつかに区別されますが、そのうちデータの操作をする場合に使用するのがADODBとなります。
さらにさらにADODBはその目的に応じていくつかのオブジェクトを使い分けることになりますが、AccessをはじめとしたOracle、MySQLなどの各種データベースの接続をする際にはADODB.Connectionオブジェクトを使います。
このADODB.ConnectionオブジェクトがAccessデータベースとエクセルVBAの橋渡しの役割を果たします。
ちなみに、別記事でUTF-8のCSVを取り扱う際にはADODB.Streamオブジェクトを使うということをお伝えしていましたね。
ADODBライブラリを追加する
その前に、ADODB.Connectionを使うためには、ADODBライブラリを追加する必要があります。
Visual Basic Editorのメニューから「ツール」→「参照設定」を開いて、ライブラリの中から「Microsoft ActiveX Data Objects x.x Library」を見つけてチェックを入れます。執筆時のバージョンは「2.8」ですが、最新のものを選べばOKです。
Accessデータベースに接続するVBAプログラム
では、実際にAccessデータベースに接続するVBAプログラムを書いてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub ConnectDB() Dim strFileName As String strFileName = "test.accdb" 'データベースのファイル名 Dim adoCn As Object Set adoCn = CreateObject("ADODB.Connection") 'ADODBコネクションオブジェクトを作成 adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\" & strFileName & ";" 'Accessファイルに接続 adoCn.Close 'コネクションのクローズ Set adoCn = Nothing 'オブジェクトの破棄 End Sub |
以下で解説をしていきますね。
ADODB.Connectionオブジェクトの生成
まず、7行目でADODB.Connectionオブジェクトを生成して、adoCnという変数で取り扱えるようにセットをしています。
これは決まり文句ですので、Accessデータベースを取り扱うときにはコピペをしてプログラム冒頭入れておきましょう。
Accessデータベースへの接続をオープンする
次にAccessデータベースへの接続をオープンします。プログラムの8行目ですね。
ADODBコネクションオブジェクト.Open “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Accessデータベースファイルのフルパス;”
これで指定したAccessデータベースへの接続がオープン状態になり、データベースの操作ができるようになります。
ProviderとData Sourceという二つのパラメータがありますが、Accessデータベースの場合はProviderは「Microsoft.ACE.OLEDB.12.0」で固定です。Data SourceにAccessデータベースのファイルをフルパスで指定してあればOKです。
今回は、エクセルVBAのファイルと同じフォルダにあるという前提ですので、ThisWorkbook.Pathを活用して指定をしています。
データベースへの接続をクローズしてオブジェクトを破棄
データベースの操作が終わったら、データベースへの接続をクローズします。プログラムの10行目です。
ADODBコネクションオブジェクト.Close
これで該当のADODB.Connectoinオブジェクトの接続がクローズします。
最後に11行目ですが、オブジェクトを破棄してあげています。
この二行もデータベースを利用した後はお決まりフレーズとして入れて頂ければOKです。
実行結果
…このプログラムを実行しても、なーんにも起きません。
実際にデータベースに接続できているのか…?と心配になりますが、できています。(たぶん)
次回、ちゃんとデータを取り出してみせますよ。
まとめ
何にも起きないつまらないプログラムを紹介してしまいました。こんなことは初めてです。
ですが、エクセルVBAでAccessデータベースに接続する際には必須の手続きになりますので、ぜひしっかり押さえておいて頂ければと思います。
以降、エクセルVBAでAccessデータベースを操作する手順としては
- ADODB.Connectionオブジェクトを生成
- ADODB.Connectionオブジェクトの接続をオープンして目的のAccessデータベースに接続
- Accessデータベースを操作
- ADODB.Connectionオブジェクトの接続をクローズ
- ADODB.Connectionオブジェクトを破棄
というものが基本になります。
少しややこしいですが、お決まりですので…マスターしちゃいましょう!
次回、接続したAccessデータベースからデータを取得していきたいと思います。
どうぞお楽しみに!
連載目次:エクセルVBAでエクセルからAccessデータベースを操作する
エクセルと相性の良いデータベースとして第一候補として挙がるAccess。エクセルをインターフェース、AccessをデータベースとしてエクセルVBAを使って連携する方法とその様々なテクニックについてお伝えしていきます。タカハシノリアキ
最新記事 by タカハシノリアキ (全て見る)
- エクセルVBAでAccessデータベースと接続する最もシンプルなプログラム - 2016-07-13
- 仕事のスタートダッシュが圧倒的にスピーディかつ美しいEvernote活用法 - 2016-07-12
- ひとり社長1年目の税務タスクまとめ中編~年末調整に関する色々~ - 2016-07-11
- WordPressショートコードで複数の記事タイトルを表示する方法 - 2016-07-10
- 【スプレッドシートで給与計算】打刻時間を指定の分単位で切り上げ、切り捨てをする方法 - 2016-07-10