ExcelでRDB(リレーショナルデータベース)を操作してみようという連載のその2です。前回の記事はこちらです。
Accessファイルを作ってみる
何はともあれAccessファイルを作ることです。ファイルを作れないことには話になりません。Excelファイルをデータベース操作するときはADODB.Connectionオブジェクトを使用していましたが、こちらはファイル作成が出来ません。そもそも、Excelで操作しているわけですからファイル作成自体はExcel自身で十分なわけです。ではどうするかというと、Microsoft ADO Ext.6.0 for DDL and Securityを使用します。まず、任意のExcelファイルを作成したら、VBEのメニューでツール⇒参照設定で参照設定画面を開いてMicrosoft ADO Ext.6.0 for DDL and Securityにチェックを入れてください。次に、標準モジュールを作成して以下のプロシージャを入力してみてください。
'Accessデータベースファイルを作ります
Public Sub MakeAccessFile()
Dim fileName As String
Dim connectString As String
Dim catalogObject As Object
Set catalogObject = CreateObject("ADOX.Catalog")
'データベースファイル名
fileName = ThisWorkbook.Path & "\AccessDB.accdb"
'データベース接続文字列(Access2007以降)
connectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fileName
'ファイル作成
catalogObject.Create connectString
End Subえ?たったのこれだけ・・・で、このプロシージャを実行してみると・・・用意したExcelファイルと同じ場所にAccessのデータベースファイル"AccessDB.accdb"か゜出来上がります。たったのこれだけなんですね。では、早速ファイルの中身を覗いてみましょう。と、言ってもAccessは持っていませんのでExcelで開いてみます。Excelを開いたら作った"AccessDB.accdb"をドラック&ドロップしてみます。と、僕の環境では『セキュリティーに関する通知』というアナウンスが出てきます。有効にするか無効にするかを聞いてきますので、有効にするを選択すると・・・

そりゃそうですよね。ファイル作っただけですから。データはおろか、テーブルだってないんですもの。それではテーブルを追加する方法を用意しましょう。一緒にフィールドも作ります。上記の標準モジュールに以下のプロシージャを追加して実行してみてください。
'Accessデータベースファイルにテーブルを追加します
Public Sub AddTable()
Dim fileName As String
Dim connectString As String
Dim catalogObject As Object
Dim tableObject As Object
Set catalogObject = CreateObject("ADOX.Catalog")
Set tableObject = New ADOX.Table
'データベースファイル名
fileName = ThisWorkbook.Path & "\AccessDB.accdb"
'データベース接続文字列(Access2007以降)
connectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fileName
'ファイルに接続
catalogObject.ActiveConnection = connectString
'テーブル作成
tableObject.Name = "Table_1"
'フィールド作成
tableObject.Columns.Append "登録ID", adInteger
tableObject.Columns.Append "氏名", adVarWChar
tableObject.Columns.Append "生年月日", adDate
tableObject.Columns.Append "備考", adLongVarWChar
'テーブル追加
catalogObject.Tables.Append tableObject
End Sub実行すると"AccessDB.accdb"のファイルサイズがちょっぴり増えましたよね。Excelにファイルをドラック&ドロップしてみると、今度は『セキュリティーに関する通知』の後が以下の様になりました。

お、なんかよさそうじゃないですか。OKを押してみると・・・

あー、テーブルが出来ています!!ここまでくればしめたもの。データの追加や削除、編集をADODB.Connectionオブジェクトを使って実行していけばいいんです。ちなみに、AddTable内の tableObject.Name = "Table_1" を tableObject.Name = "Table_2" に変えて再度実行するとファイルサイズがもう少し増えます。同じように開いてみるとセキュリティーに関する通知の後に以下の画面が出てきます。

開くテーブルを選択するように問い合わせが来ます。テーブル名の指定も出来ているみたいですし、複数のテーブルを作成することも可能なようです。
大体できたよ!!
大体できましたね。次回は今回作成したモジュールの解説、そしてさらに使いやすくしていきたいと思います。
hirocom777.hatenadiary.org