ExcelとAccessをVBAで連携しよう
ExcelデータをAccessに保存しておくと何かと便利です。
データを共有できるし、データを他のソフトから参照もできます。(Excelファイルの中身も見れなくもないけど結構大変)
でも、Accessってあんまり利用されているところ見たことないですね。もっと積極的に使った方がいいと思います。Excelとの相性は良いですので。
[ad#top-1]
Accessファイルの用意
まずはAccessファイルを用意します。
今回の例は以下の通りです。名簿というテーブルを作って、名前、年齢、出身地というフィールドを作りました。データは10個入っています。
このデータを使ってExcelからアクセスしてみましょう。
その前にExcel/VBAの参照設定
AccessデータベースをExcel/VBAで使う場合、参照設定しておく必要があります。
Visual Basic Editorの「ツール」-「参照設定」を選択しましょう。
以下のウィンドウが現れます。リストの中から「Microsoft ActiveX Data Object X.X Library」にチェックを入れて、「OK」ボタンをクリックして閉じます。
バージョン番号(X.X)はどれでもいいですが、僕はいつも2.8を使っています。最新版という意味では6.1でもいいんだけど、バージョンNo.が飛んでいるからあえて使っていません。(たいした根拠はないです)
参照設定はこれで完了。
データベースを読み込む
こちらが読み込みのためのサンプルコードです。
Sub readDB() Set myCon = CreateObject("ADODB.Connection") myCon.Open _ "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\...\Database1.accdb" Set myRS = CreateObject("ADODB.Recordset") myRS.Open "名簿", myCon r = 3 Do While Not myRS.EOF Cells(r, 1) = myRS.Fields("名前").Value Cells(r, 2) = myRS.Fields("年齢").Value Cells(r, 3) = myRS.Fields("出身地").Value r = r + 1 myRS.MoveNext Loop myRS.Close Set myRS = Nothing myCon.Close Set myCon = Nothing End Sub
これを実行するとご覧の通り、Accessファイルの名簿テーブルの中身が現れます。
フィルターをかけて特定の情報を得る方法
フィルターをかけることができます。
以下がソースコードです。(1)のところが追加されました。年齢40未満の人だけを抽出するという意味です。
Sub readDB() Set myCon = CreateObject("ADODB.Connection") myCon.Open _ "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\...\Database1.accdb" Set myRS = CreateObject("ADODB.Recordset") myRS.Open "名簿", myCon myRS.Filter = "年齢<40" '・・・(1) r = 3 Do While Not myRS.EOF Cells(r, 1) = myRS.Fields("名前").Value Cells(r, 2) = myRS.Fields("年齢").Value Cells(r, 3) = myRS.Fields("出身地").Value r = r + 1 myRS.MoveNext Loop myRS.Close Set myRS = Nothing myCon.Close Set myCon = Nothing End Sub
結果はごらんのとおり、40歳未満の人だけ抽出できました。
データを修正する
今度はデータ保存の方です。特定のデータを修正する方法です。
次のソースコードは、「池田次郎」の年齢を66歳、出身地をアメリカに修正する方法です。
Sub updateDB() Set myCon = CreateObject("ADODB.Connection") myCon.Open _ "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\...\Database1.accdb" Set myRS = CreateObject("ADODB.Recordset") myRS.Open "名簿", myCon, adOpenForwordOnly, adLockOptimistic myRS.Filter = "名前='池田次郎'" '・・・(1) myRS.Fields("年齢") = 66 '・・・(2) myRS.Fields("出身地") = "アメリカ" '・・・(2) myRS.Update '・・・(3) myRS.Close Set myRS = Nothing myCon.Close Set myCon = Nothing End Sub
(1)でフィルターをかけておきます。これをやらないと全てのデータを修正してしまう危険があるので注意しましょう。(2)でデータを書き換えて、(3)でデータベースに更新しています。
データを改めて結果はこちら。確かに池田次郎さんのデータが書き換わっていることがわかります。
Accessファイルもこの通り。
データを新規追加する
次に新規追加です。
データを新規追加する場合、まず最初に行を追加します。①のmyRS.AddNew
がそれにあたります。
Sub insertDB() Set myCon = CreateObject("ADODB.Connection") myCon.Open _ "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\...\Database1.accdb" Set myRS = CreateObject("ADODB.Recordset") myRS.Open "名簿", myCon, adOpenForwordOnly, adLockOptimistic myRS.AddNew '...(1) myRS.Fields("名前") = "宮崎洋一" myRS.Fields("年齢") = 99 myRS.Fields("出身地") = "熊本県" myRS.Update myRS.Close Set myRS = Nothing myCon.Close Set myCon = Nothing End Sub
データを読み込むとこの通り最後に追加されていることがわかります。
Accessファイルもこの通り。
[ad#ad-1]
スポンサーリンク