プチIT化

Excel「ISAMドライバーが見つかりません」エラーが出た時の対処

こんにちは、わたあめです。先日Excelをポチポチいじっていたところ、こんなエラーに遭遇しました。

インストール可能なISAMドライバーが見つかりませんでした。

データ更新をしただけなのに、ISAMという聞きなれないエラーが出てしまい驚きました。このエラーはすぐに解決できましたよ!原因、解決など理解したことをまとめていきます。それでは、行ってみましょう!

事象:データ更新するとエラーメッセージが出る

エラーが発生した時の状況を書きます。Excel2016でAccessファイルに接続した(データをリンクさせました)ファイルを作成し、その後、Excel2010で該当ファイルを開きデータ更新しようとすると、エラーが発生しました。データ更新の手順はExcelの[データ]タブ>[更新](または[すべて更新])をクリックしています。

Excel2010でもファイルの閲覧だけならば、問題なく開けました。データ更新をするとこのエラーが出るのです。Office2016がインストールされているパソコンについては、エラーは出ませんでした。

わたあめ
わたあめ
ISAMって何かは分からないけど、Excelのバージョンが関連だな?!

原因:古いバージョンのExcelで開いたから

Accessのデータに接続されているExcelファイルを、古いバージョンのExcelで開いたときに起こるエラーみたいです。

Excelのバージョンが新しくなると、Accessのデータに接続する際に使うパラメーター(設定値のようなもの)が新たに加わるようです。新たに加わったパラメーターは古いバージョンのExcelでは認識できなかったため、エラーメッセージが発生したようです。

パラメータとは、ExcelからAccessに接続するときに使う設定値のようなもの。Accessへの接続制御したり、接続のパスワードを指定したり、データに対してどうロックをかけるかなど、指定することができます。ExcelでAccessの接続設定を行っている[データ]>[接続]のプロパティで定義されていますよ。

参考にした記事はこちらです。

今回の例で解説

今回の場合、2016のExcelでアクセスのデータに接続したExcelファイルを作成しました。その後、他のパソコンにあるExcel2010でファイルを開いたところ、エラーメッセージが発生という流れでした。

Excel2016で新たに用意されたパラメータが、Excel2010には用意されていないもの(対応していないもの)だったのでエラーが出たという訳です。

ところでISAMとは

わたあめ
わたあめ
ISAM(アイサム)って聞きなれない言葉だけど、何だろう?

ISAM(Indexed Sequential Access Method)はデータの持ち方・アクセス方式のひとつみたいです。データを扱うときに索引を用いることで処理が効率的にできるようなデータの持ち方で、大きなデータを扱う場合に索引があることにより早く検索できるようです。ExcelからのAccessに接続する際はISAMを使っているということなんでしょうかね。

対処方法:特定のパラメータを削除する

新しいバージョンで新たに加わったパラメーター部分(古いバージョンのExcelでは理解できないパラメータ)を削除していきますよ。手順は以下の通りです。

  1. [データ]タブ>[接続]をクリックする。
  2. 接続しているAccessを選択し、[プロパティ]をクリックする。
  3. [接続のプロパティ]ボタンをクリックする。
  4. [定義]タブをクリックする。
  5. [接続文字列]欄を編集する。(編集の仕方は、詳しく後述します。)

[接続文字列]欄の編集

以下のパラメータの文を削除します。

"Jet OLEDB:Bypass UserInfo Validation=False"
"Jet OLEDB:Limited DB Caching=False"
"Jet OLEDB:Bypass ChoiceField Validation=False"

該当文がない場合は、特に何もせず、ある文だけ削除しましたよ。文末に";"があれば一緒に削除しました。";"は文と文を区切るためのものです。

実際の例を元に解説していきます。(※データはマスキングしています。見やすいように、ここでは改行入れてます。)まずは、設定前のパラメータです。

Provider=Microsoft.ACE.OLEDB.**.*;
User ID=XXX;Data Source=******.accdb;
Mode=Share Deny Write;Extended Properties="";
Jet OLEDB:System database="";Jet OLEDB:Registry Path="";
Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;
Jet OLEDB:Bypass UserInfo Validation=False

私の環境では前章に述べた"Jet OLEDB:Bypass UserInfo Validation=False"のみ存在したので、その部分を削除しました。以下が、設定後のパラメータになります。

Provider=Microsoft.ACE.OLEDB.**.*;
User ID=XXX;Data Source=******.accdb;
Mode=Share Deny Write;Extended Properties="";
Jet OLEDB:System database="";Jet OLEDB:Registry Path="";
Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;

 

わたあめ
わたあめ
この設定後、データ更新がエラーなくできるようになりました。

さいごに

お疲れさまでした!私の環境ではこの方法でエラー解消できました!みなさまの環境ではどうだったでしょうか。少しでもお役立ちになれますように!

それでは、また!

flier(フライヤー)