非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

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]

スポンサーリンク

 - Excel, VBA