【FileMaker】もうエクスポートはしない。ExcelからFileMakerのデータを持ってくる！

今年もやってきました、Advent Calendar。
私の番では、FileMaker Pro 16を中心にお送りします。
と言っても、あまりバージョンを意識しなくても実装できるものが多いので、記事を読んだ後は是非とも実装してみてくださいね。

今日は、FileMakerを意識せずに、FileMakerのデータをExcelに取り込む、というタイトルです。
FileMakerからデータをエクスポートするのはFileMaker屋さんがするっと考えることですが、そうでないIT屋さんやExcel屋さん（あえてIT屋さんと切り離しました）は、FileMakerは敷居が高いのではないでしょうか？

そこで、Excelに標準搭載されているODBCデータインポート機能を使ってFileMakerのデータを取得しよう、ということになります。
かつ、今回は、FileMaker Serverを使わずに、PCで使っているFileMaker ProのデータをそのままExcelに持ってきます。

# 前提条件
今回の用意するものは、以下になります。
・Windows PC
・Excel（ODBCデータインポート機能がついているバージョンであれば大丈夫かと）
・FileMaker Pro
・FileMaker ODBC

Windowsと限定したのは、理由があります。
それは、

**Windows版のExcelでないと、FileMakerの現バージョンが扱えない**

ためです。
Excel for Macは、fp7拡張子のFileMaker 11以前のものでないと扱えません。
この辺は、Microsoftになんとかしてもらいたいのですが、そんなこと言ってると進まないので今回はWindowsで環境を整えました。

# ODBCの準備
異なるDBとのやりとりを実現する手段として、ODBCが選択肢として挙げられます。
今回は、FileMakerのインストールメディアで提供されいてるODBCドライバを使います。
Windowsへのインストール方法は、[ODBCとJDBCガイド](https://fmhelp.filemaker.com/docs/16/ja/fm16_odbc_jdbc_guide.pdf) をご覧ください。
このPDFの13ページに、「ODBC クライアントドライバのインストール (Windows)」とあります。

すでにODBCをインストール済みの場合は、作業なしです。

#FileMakerファイルのアカウント準備
アクセスするFileMakerのファイルで、ODBCからのアクセス用のアカウントを作成します。
このアカウントを使って、接続します。
このアカウントでは、「ODBC/JDBCによるアクセス」という権限を付与しておいてください。
これがないと、アクセスがはねられます。
<img width="745" alt="1201_1.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/3af098ba-38b4-ddf9-1972-d6f0017fa6f6.png">

# ODBCデータソース(DSN)を作成する
Windowsに標準で装備されている、ODBCデータソースアドミニストレーターを使って、DSNを設定していきます。
PCにログインしている人が全員使える、システムDSNで今回は作成します。
<img width="663" alt="1201_2.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/af249e01-80d4-25b8-37f9-d83ffa054fb1.png">

FileMakerのドライバを選択します。
<img width="515" alt="1201_3.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/f01cf1a3-4a2e-0af1-ddb8-9c393f1a075a.png">

次へボタンで、設定を続けます。
<img width="487" alt="1201_4.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/f1ef7765-8570-582e-4940-f66dd9a2351d.png">

DSNの名前を適当につけます。
<img width="491" alt="1201_5.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/277001fe-e970-baae-9e69-eeba9c516365.png">

今回は、同一PC内にあるFileMakerからデータを取得するので、localhostのまま、続けます。
<img width="489" alt="1201_6.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/0a451a51-3b0f-59bd-5f1d-33af4ab0486f.png">

アクセスするFileMakerファイル名を指定します。
<img width="492" alt="1201_7.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/ec1796c7-8074-2c0e-910e-f3b8d9920ab2.png">

最後に、テストボタンが出てきます。
FileMakerのファイルを立ち上げ、先ほどFileMakerで設定したアカウントのid,passを指定して、FileMakerにアクセスできることを確認してください。
<img width="486" alt="1201_8.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/da318873-9a9f-f177-e753-b93be15a8bd0.png">

うまくいきましたか？
<img width="488" alt="1201_9.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/182e924b-1f48-4ed5-4013-c19838fa879f.png">

# FileMakerからデータを取得する
では、やっとFileMakerからExcelにデータを取り込みます。
まずは、FileMakerのファイルを開いておいてください。

FileMakerのファイルが閉じている場合、ODBC接続をした時に次のキャプチャのようなODBCエラーが発生して、データの取得に進めません。
<img width="695" alt="1201_19.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/a60a9155-b6c8-e6b1-c042-efcda2a3400f.png">

では、FileMakerのファイルを開いたところで、続きです。
Excelの「データ」タブで、「ODBCから」をクリックし、先ほど設定したデータソースを選択します。
<img width="1001" alt="1201_10.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/0e6b5d44-1134-42e3-06ce-6fba6349b01f.png">

FileMakerで設定したアカウント情報で、接続します。
<img width="614" alt="1201_11.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/e8a04921-f223-7381-45de-f1fddb36c15c.png">

アクセスに成功すると、どのデータをダウンロードするか、ナビゲーターが表示されます。
ダウンロードするテーブルを選択します。
今回は、KEN_ALLというテーブルになります。
<img width="435" alt="1201_12.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/3aa03d61-14d0-fc4b-72ae-c91d571d5fc6.png">

データのプレビューが出てくるので、「読み込み」ボタンをクリックします。
<img width="728" alt="1201_13.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/f9ef3472-db0b-6ecb-4e68-cec511cd4963.png">

データ、きました！
<img width="994" alt="1201_14.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/8207e5a6-ddde-0c06-403b-a7f51ef2986a.png">

# 取得するデータの条件を設定する
テーブル全部のデータを取得する、というのは、実は稀なんではないでしょうか？
例えば、月別データやエリア別データなど、欲しいデータの条件を設定したいですよね？

ODBCデータ取得をマクロ登録してみると、普通に「読み込む」だけだとselect allしているのがわかります。
<img width="554" alt="1201_15.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/fb99aba8-082a-fd6a-e5c4-4cbb003b4c22.png">

なので、ステップアップとして条件を指定してデータを取得してみます。
データをプレビューした時に、「読み込み」ボタンの横に「編集」というボタンがあります。
<img width="836" alt="1201_16.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/bb69ce0c-69f2-6c2f-12a5-bbea15e86def.png">
これを、クリックします。

例えば、東京都のデータのみを抽出する場合です。
このように、Excelを使っていればよくみるフィルター機能を使って条件を指定できます。
<img width="978" alt="1201_17.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/685235d0-630d-d6d0-b6e3-70ff2697b812.png">
条件を指定し終わったら、「閉じて読み込む」をクリックして、取り込みます。

東京都データ、きましたね！
<img width="1222" alt="1201_18.png" src="https://qiita-image-store.s3.amazonaws.com/0/60538/34a8b975-0c9d-db8f-20d1-4daf34e90795.png">


いかがでしたでしょうか？
今回のこの実装をマクロ化してボタンにしておくと、一発で欲しいデータが取得できますよ。
FileMakerを使い慣れなくても、FileMakerのデータを活用できますので、ぜひやってみてください。