Excelの外部データ取り込み(2007以降)

 Excelの外部データ取込は、データベースなどの外部のデータをExcelに取り込んで、テーブルとしてデータ表示させたりピボットテーブルとして利用できます。XCuteでも、この機能が有効利用できるように、Ver9.3からproles.iniにRefreshAllandSave=1とすると「Xcuteが起動しひな型のExcelブックを開く時、Refresh(自動更新)してブックも保存する」などしています。(注:Accessなど外部データベースファイルがプロジェクトのフォルダーにあれば、開発と運用環境でパスが違うことを配慮し、パスの補正も行ってより使いやすくなっています。)
 本項では、Excelの外部データ取り込みをデータベースの接続として使うものとして、接続の方法を解説します。

 外部データ取込方式には、ファイル名直接指定方式とODBC経由の2つの方式があります。下図で、Accessデータベースを選ぶとAccessのファイル選択が行え「ファイル名直接指定方式(OLEDB)」です。その他データソースを選ぶと、データソースの選択画面が表示され「ODBC経由」の方式です。OracleやSQLサーバなどのデータベースでは、ODBC経由を使います。AccessやExcelファイルデータベースの場合、Microsoft Queryが使える「ODBC経由」は避け、「ファイル名直接指定方式(OLEDB)」を使ってください。

ファイル名直接指定方式(OLEDB):
 
下記は、この方式でAccessのmdbを接続したものです。注意点は、接続文字列のMode=Read; と指定することです。これがMode=Share Deny Write;などですと、XCuteを含め他のアプリケーションでこのAccessファイルが使えなくなります。

ODBC経由方式:
 
下記は、ODBC経由でOracleを接続したものです。注意点は、パスワードを保存するにチェックを入れることです。

Microsoft Queryとパラメータの利用
 
下記のように、Microsoft Query を開き、表示(V)メニューから「抽出条件フィールド」を表示し、値の所の[Para]のようにかぎカッコでくくるとパラメータと認識されます。

 Excelに戻り、下記のように、パラメータをセルに割り振ります。セルの値を変えて、クエリーを動的に変更できます。

まとめ:
1)Accessのようなファイルデータベースでは、「ファイル名を直接指定(OLEDB)」と「ODBC経由」の2つの方式がありますが、、「ファイル名を直接指定(OLEDB)」がお勧めです。

2)proles.iniにRefreshAllandSave=1とすると「Excelブックを開く時、Refresh(自動更新)してブックも保存」するなどしていますので、Excelの外部データを使う時は、このフラグ(RefreshAllandSave=1)は設定しておいてください。ReStartWeek=0に設定して1日1回再起動の設定をしておけば、前日までのファイルの更新分はRefreshされます。
上記の要件を超えて、外部データを使う度にRefreshをするならマクロなどで対応してください。
なお、RefreshAllandSave=1の時、外部データベースにAccessなどのファイルを「ファイル名を直接指定(OLEDB)」で接続した場合には、plsファイルと同じフォルダーにAccessファイルがあれば、「Excelブックを開く時、パス名の補正を行い、Refresh(自動更新)してブックを保存」しています。 パス名の補正を行う理由は、開発環境と運用環境のパス名のミスマッチを解消させるためです。

3)「Excelの外部データ取込」が難しいのは、自分でマクロを作って、あるいはRefreshAllandSave=1などしてRefresh(更新)する時に、下記の自動更新のダイアログが表示されてしまうことが多いためです。XCuteはサーバソフトで、無人運転にダイアログは致命的です。
Microsoft社の技術資料(http://support.microsoft.com/kb/826921/ja)によれば、このダイアログは、「無効なリンクまたは破損しているリンクがブックに含まれている場合、選択するオプションにかかわらず、メッセージが表示されます。 」の時表示されるとされ、弊社のテストでは、Excel2007では表示されないがExcel2003では、MS Queryを使いパラメータを利用した時には、リンクが破損されたらしく、このダイアログが表示されました。
Excel2003ではパラメータなど利用せず、VBAで、クエリーを自分でセットするなどして、ダイアログを避けます。

補足:(接続文字列の変更)
 ACCESSのMDBファイルの既定の接続は、Excel2003ではJETOLEDBでしたが、Excel2007以降ではACEOLEDB(ACCESSのACCDB用Provider)に変更されました。これをJETに戻すには、接続文字列の変更すればよいのですが、これをGUIで行うには、下記のようにして「データリンクプロパティ」を表示します。