道具としてのExcel活用

Excelから直接Accessのファイルを使う環境で、突然動かなくなる

Excelマクロ(VBA)から、Accessデータベースを使う

ExcelからACCDB・MDB(Accessのファイル)を呼び出す

Excelは表計算、Accessはデータベースと一般的には認識されていますが、Accessで使用するMDB、ACCDB形式のファイルを、Excelのデータ格納庫としてのみ使うことも可能で、気軽に大量データからのデータ抽出などが可能になります。

特に呼び出すだけであれば、標準機能だけでできます。

「データ」→「Accessデータベース」でファイル・テーブル等の選択を行えば、Excelの任意のセルを起点にデータ(テーブル・クエリー)を呼び出すことができます。

 

ExcelからACCDB・MDBに書き込む

また、マクロ(VBA)を使えば、書き込むこともできるので、大量データを大勢で利用(特に更新を含む使い方)においては、Accessだけでアプリケーションを作るよりも、使う人の抵抗感を減らせます。

更に、この場合はAccessのライセンスが要らないので、大企業など大勢が使う使う環境では、Accessのためだけに上位ライセンスを購入するコスト(かなりの金額になります)を抑えられるメリットがあります。

 

64bit環境での動作制約

MDBは64bit環境が用意されていない

Accessのファイルは、古くは*.mdbという拡張子でしたが、2007以降のバージョンでは*.accdbに変わりました。

特段できる事が増えたわけでもないので、一般ユーザーにとっては「Excelが*.xlsから*.xlsxになったのと同じ」程度に認識されがちですが、実は検索に利用されるエンジンの種類が変わりました。元々はJET(ジェット)と呼ばれるものでしたが、ACCDB形式ではACE(エース)と呼ばれるものに変わっています。ちなみに、機能的には大きな違いはないので、未だに昔作ったAccessによるアプリを、MDB形式で使っている処も少なくありません。

問題は、ExcelからMDBファイルを操作しようとした場合、先のJETを介して行う事になるのですが、JET(MDB)環境が使われていた頃はOSも含めて32bit環境しかなかったものが、最近は64bit環境が標準になりつつあり、そうなるとMDBが使えるJETが含まれていないことによる不具合が発生してしまいます。

詳しい情報についてはこちらをご参照ください。

 

ACCDBは64bit環境でも32bit用ファイルを探しに行く”仕様”

一方、新しい(といっても15年前ですが)ACCDBファイルは、元々は32bit環境前提でしたが、最近になり64bit環境のWindows/Officeで使われることが前提となっています。尤も、64bit環境を”前提”としたのは、Officeが2019以降になってから、全般的に言える話です(それ以前は、Microsoft自身ができるだけ32bit環境を使うよう呼びかけていました)。

このため、最近のOffice環境でマクロ(VBA)を使ってExcelからAccdbの操作を行おうとすると、64bitが標準のため、エラーとなってしまいます。これは、64bit環境のExcel(Office全般)からACCDBを操作する際、32bit版のACEを探しに行く”仕様”のためです(利用者側の感覚だと”バグ”なのですが、修正する予定がないものは"仕様”扱いとなります)。

従って、この組合わせは、公式的には動かないということになります。

 

Microsoft製コンピュータでは動く

さらにややこしいのは、Surfaceのような、Microsoft純正環境においては、上記の制約は発生しません。OS/Office/Hardware全てが純正なので、理想的な動きとなるのでしょう。

となると、今後修正する予定がない(顕在化して数年以上経過してもそのまま)というのは不思議です。

 

対処方法 (それでもExcelからDBを使う)

対処法1:32bit版Officeに入れ替える

面倒ですが、一度アンインストールしてから32bit環境のOfficeをインストールすれば、問題は解決します。とはいえ、企業などで台数がまとまっている場合、入れ替えるコストやその間コンピュータが使えなくなるインパクトは、馬鹿にならず、あまり現実的とはいえません。それに、今後のOfficeでも32bit版が提供されるか分かりませんし、そもそも素の状態から32bitを入れるには、コツが要ります(最近のOfficeだと、bitの選択肢がでてきません)。

 

対処法2:64bitランタイムをインストールする

非公式な方法ですが、64bitのランタイムを入れることで、実質的にACEドライバだけを更新するような対処となります。なお、従前ACEのバージョンは12で動いていましたが、15のランタイムにする必要があります。また、最近のOfficeではバージョンが16になってしまうので、敢えて旧いバージョンを入れることになります。

この他、通常使うAccessもランタイム上で開くようになるといった弊害があるので、広く展開する前に小規模なテスト運用を行うことで、影響を見極めるのが良いでしょう。

 

根本的な対処法:データベース(サーバ型)に移行する

これら諸問題は、いずれもOfficeアプリ間の整合性の問題であり、データベースサーバに接続する分には問題が生じません。

そこで手っ取り早いのは、SQL Serverの無償版に置き換えるか、将来の拡張性を考えてAzure Databaseなどのクラウド型データベースに置き換える方法です。

 

Access 2013 までは「アップサイジング ウィザード」が用意されていたのですが、新しいバージョンの場合は「Microsoft SQL Server 移行アシスタント (SSMA)」 を使用します。

「手っ取り早い」とはいっても、中身のロジックを変更する必要がありますが、大抵は接続用のロジックは1箇所に固まっているので、そこだけ直せば終わるはずです。

なお、データベースサーバとしての初期設定やクラウドの契約手続き等、付帯的な手続きが必要となります。

 

対応のお手伝いをします

色々と試みて、いよいよ手に負えなくなった場合、軽量化や機能拡張も含めた再構築をお手伝いしています。

詳しくは、こちらをご参照下さい。