さらに、データベースにエクセルを接続すれば、ADOやSQLなどを用いてデータベースのデータを直接扱う結構複雑なアプリケーションを作ることもできます。
このデータベースに接続するアプリケーションを作る技術は意外と重宝されるものですから、がんばって勉強しましょう。
つぎのようにVBEに書き込むことで、MSaccess(データベース)へとアクセスし、データをExcelへと持ってくることができるようになります。
なお、下記のコードはADOを利用していますのでそのまま貼りつけるだけでなく参照設定も少し変えないと動きません。これをしないで動かそうとするエラーが出ます。参照設定の説明はコードのあとで。
見本ダウンロード:
https://www.dropbox.com/s/w9nsf7hxds4ubva/DB%E6%A4%9C%E7%B4%A2%EF%BC%88%E8%A1%A8%E7%A4%BA%E3%81%AE%E3%81%BF%EF%BC%89.zip?st=bh565q7q&dl=0
(見本はzipに入っている状態だと動きません。zipを解凍してから実行してください)
-----------------------------------------------------------------------
Sub Test()
Dim adoCON As New ADODB.Connection
Dim adoRS As New ADODB.Recordset
Dim strSQL As String
Dim odbdDB As Variant
Dim wSheetName As Variant
Dim i As Integer
odbdDB = ActiveWorkbook.Path & "\DB_name.accdb"
adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source=" & odbdDB & ""
adoCON.Open
adoCON.BeginTrans
'BeginTransはトランザクションを始めるものです。adoCON.CommitTransはトランザクションを終了します。トランザクションはデータの扱いの正確性を保障するためのものなので無くてもプログラム自体は動きます。
adoRS.CursorLocation = adUseClient
'データベース検索のためのSQL文
strSQL = "SELECT * FROM table_name ORDER BY table_name.ID;"
'もし変数を使って検索したいのであれば、次のように書いてください。
'strSQL = "SELECT table_name.* FROM table_name WHERE subject_of_the_table = " & TextBox1.Value & ";"
'もしTextBox1.Value(変数)のなかの値が文字列だった場合、次のように書いてください。
'strSQL = "SELECT * FROM table_name WHERE subject_of_the_table LIKE '" & TextBox1.Value & "';"
'文字列の場合はこう書かないとエラーになります。
adoRS.Open strSQL, adoCON, adOpenDynamic
i = 1
Do Until adoRS.EOF
With Worksheets("Sheet1")
.Cells(i, 1).Value = adoRS!ID
.Cells(i, 2).Value = adoRS!Name
.Cells(i, 3).Value = adoRS!age
End With
i = i + 1
adoRS.MoveNext
Loop
adoCON.CommitTrans
'先述のとおりこれはトランザクション用。トランザクションを閉じています。
adoRS.Close
Set adoRS = Nothing
adoCON.Close
Set adoCON = Nothing
End Sub
---------------------------------------------------------------------
上記でデータベースからデータを持ってくることが可能ですが、青い部分は個人個人それぞれ記入するものが違いますので、それぞれの場合に応じて書き換えなければいけません。
なお、
---------------------------------------------------------------------
Do Until adoRS.EOF
With Worksheets("Sheet1")
.Cells(i, 1).Value = adoRS!ID
.Cells(i, 2).Value = adoRS!Name
.Cells(i, 3).Value = adoRS!age
End With
i = i + 1
adoRS.MoveNext
Loop
---------------------------------------------------------------------
の部分を以下のように書けば、activeのシートを対象に動きます。
---------------------------------------------------------------------
Do Until adoRS.EOF
With Worksheets(ActiveSheet.Name)
.Cells(i, 1).Value = adoRS!ID
.Cells(i, 2).Value = adoRS!Name
.Cells(i, 3).Value = adoRS!age
End With
i = i + 1
adoRS.MoveNext
Loop
---------------------------------------------------------------------
参照設定について
なお、参照設定は以下のように設定します。
1、まず、VBEの画面を出します。(そもそもVBEの画面の出し方が分からない場合は開発タブが追加されていないのだと思います。その場合は開発タブを追加してから手順を進めてください)
開発タブってこれ
参照設定はここ
参照設定がクリックできない場合はなんらかのマクロが動いている可能性が高いです。
四角いボタンを押して止めてください。
3、「参照設定」をクリックしたらライブラリ等を追加できる画面がでます。ここで「Microsoft ActiceX Data objects ○○ Library」ってやつを探してください。これがADOってやつです。おそらくひとつだけじゃなくたくさんのバージョンが見つかると思いますが、基本的には最新のバージョンを使えばいいでしょう。
こんな画面
これを探します。