'実行ファイルと同じ場所に空のAccessファイルを作成 Dim zzDBAdox As Object Set zzDBAdox = CreateObject("ADOX.Catalog") zzDBAdox.Create "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\作成DB.accdb" Set zzDBAdox = Nothing
Accessデータベースの2007以降のバージョンである、accdbファイルを処理実行ファイルと同じ場所に新規作成します
同じ名称のファイルが存在する場合は実行時エラーが発生します
基本的にこのコードはAccessがPCに入っていない環境でデータベースを扱う際に使用します
Accessがあるなら、Accessで作成してもらってもいいです
コード解説
Dim zzDBAdox As Object
Accessデータベースを作成するには、ExcelVBAの標準コードでは実行できません
ADOX.Catalogというものを使用しますので、これのインスタンスの作成を先に行う必要がありますので、それを代入させるための変数宣言です
事前バインディングであれば、「Microsoft ADO Ext. 6.0 for DDL and Security」を参照設定して「ADOX.Catalog」の型指定を行うことでインテリセンスを使用できます
参照設定の数字の部分は使用するバージョンによって差があります
ただ、このオブジェクトではデータベースを作成する以外にテーブルの設定などを取得できますが、ほぼこの作成機能しか使用しないのでそこまではしなくてもいいとも思います
Set zzDBAdox = CreateObject("ADOX.Catalog")
実行時バインディングを実行しています
その際に使用するのが「ADOX.Catalog」という文字列になります
これで機能を使用することが出来る状態になりました
zzDBAdox.Create "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\作成DB.accdb"
実際のファイル作成のコードになります
Createメソッドを使用することでファイルの作成を行えます
通常のExcelのファイルを作成するように、ただファイルの絶対パスを指定するだけでは作成できません
Providerという引数を指定する必要があります
これに関してはAccessのバージョンによって違いがあります
「Microsoft.Ace.OLEDB.12.0」というのはAccessの2007以降のaccdbファイルを利用する場合に指定する文字列です
ここに関してはOfficeの上位互換を考慮すると、それほど意識する必要はありません
実際、2019でも365でも12の利用に問題はありません
これの上位に「Microsoft.Ace.OLEDB.16.0」というものがあります
主にBit環境に依存するようですので、もし接続エラーが発生する場合に切り替えるようにすればいいと思います
正直Bit依存の対応は永久的な方法は存在しないので、あまり考えてもしょうがないです、ExcelVBAの業務改善はその時その場面での利用が多いからです
WinAPIの利用時と同じようなイメージということになります
このProvider文字列は作成時だけでなく、接続時にも使用します
接続時とは、データベースを操作するタイミングのことです
なので、以降もよく出てくるので広域常数やモジュールレベル常数で作成しておけば良いです
この接続文字の後にファイルの絶対パスを指定します
ファイルの拡張子はaccdbを指定してください
Accessのデータベースファイルには、これ以前にmdbファイルというものがあります
ただこの拡張子はもうaccdbに代わって10年以上経っています
なので本サイトではここ以外では扱いません
なお、mdbファイルの作成及び接続には以下の文字列を使用します
「Microsoft.Jet.OLEDB.4.0」で接続して、ファイルの拡張子はmdbとします
接続後の操作に関しては全く同じです
Set zzDBAdox = Nothing
オブジェクト変数を使用しているので、最後に解放します
作成後について
これでファイルの作成が完了です
ただし空のファイルなので、テーブルも存在していません
テーブルというのはデータを収める場所です
イメージ的には全くシートの存在しないExcelファイルを作成しただけで、シートを作成しないとデータを入力することが出来ない状態というようなイメージです
テーブルの作成もレコードの操作もExcelVBAから行えますので、そちらを行ってください
また、このファイル作成を一時ファイルとして利用することも出来ます
というのも、データベースでの最大の利点がSQLを利用することが出来る点になります
これを利用すると、集計やデータ全体の加工などがExcel上で扱うより楽に出来たり、処理速度の向上に繋げることも出来ます
なので、このコードで一時ファイルを作成してデータベースを登録して加工・集計してワークシートに出力して、一時ファイルを削除する
という流れの処理を作成することも出来ます、ExcelVBAにSQLを加えることが出来ます
もし大容量データを加工・集計して、別のシートやブックに転記するような処理があった場合は検討してみてください