道具としての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箇所に固まっているので、そこだけ直せば終わるはずです。
なお、データベースサーバとしての初期設定やクラウドの契約手続き等、付帯的な手続きが必要となります。
対応のお手伝いをします
色々と試みて、いよいよ手に負えなくなった場合、軽量化や機能拡張も含めた再構築をお手伝いしています。
詳しくは、こちらをご参照下さい。