事前準備もバッチリ解説!
Power Automate for desktopでSQLを実行してExcelデータを集計する
公開日
はじめに:標準のExcelアクションだけでは辛い・・・
Power Automate for desktop(以下PAD)にはExcel操作のための標準アクションが用意されており、
いろいろなことが出来て大変便利です。
しかし、苦手なこともあります。例えば、単純な合計の算出をする場合でも、
わざわざループして値を一行ずつ加算していくような処理が必要です。
グループ化した集計も、出来なくはないですが、なかなか面倒です。
他にも、データを検索したり、ある列をキーにして別の表から値を引っ張ってきたり(VLOOKUPのようなこと)、あるいはデータを並べ替えたり、・・・いずれも可能ですが、難易度が上がるというか、プログラミング感が強くなってきます。
SQLをご存じの方は、いっそSQLが使えたらな・・・と考えるのじゃないかと思います。
そこで今回は、PADでSQLを使うための設定から実際の使い方までご紹介します。
💡SQLとは?
SQLは「えすきゅーえる」または「しーくぇる」という読み方で、データベースに対する操作・問い合わせのための言語です。
シンプルな文法で、検索・グループ化集計・結合・並べ替えその他のデータ操作がスパッと出来るのが特徴です。
(Where, Group by, Join, Order byなど。)
SQLの情報はネットに溢れていますので、詳細についてはそちらに譲ります。
大枠が理解できたら、あとはChatGPTやBing Chat, Google BardなどのAIに聞いて、書いてもらうのも手です。
事前準備:Access Database Engineのインストール
Access Database Engineのダウンロード
PADでSQLを使うためには、64bitのAccess Database Engineをインストールする必要があります。
インストーラーはこちら↓から入手できます。
(Microsoft Access Database Engine 2016 Redistributable)
https://www.microsoft.com/ja-JP/download/details.aspx?id=54920
しかし、もしお使いのPCに32bit版のOfficeを入れている場合、インストーラを実行しても
↓下のようなエラーが出てインストールできません。
エラーメッセージの指示通りに64bit版Officeをインストールするという訳にもいかないでしょうから、
一体どうすれば良いのでしょうか?
コマンドプロンプトからサイレントインストール
対応策ですが、32bit版Officeを利用している人は、コマンドプロンプトからサイレントインストールします。
⚠️ 注意
これからその対応策をご説明しますが、レジストリをいじくる、ちょっと強引なやり方です。
実際やってみるかどうかは、ご一読のうえ、ご自身の判断でお願い致します。
① まず、コマンドプロンプトを「管理者として実行」で立ち上げてください。
Access Database Engineインストーラのファイルパスはコピーしておきます。
② コマンドプロンプトにはファイルパスを入力し、そのあとに /quietと入れて、
Enterで実行してください。(ファイルパスと/quietとの間にはワンスペース)
これで64bitのAccess Database Engineのインストールが出来ました。
ただしPADでSQLが使えるようにはなりますが、このままだとAccessが開けなくなってしまいます。
試しにAccessファイルを開くと、以下のメッセージが出てきます。
また、Outlookの予定表にも悪影響が出ることもあるようです。
そこで、レジストリに手を加える必要があるのです。
レジストリを変更する
① Windowsのテキストボックス(虫眼鏡)にregeditと入力し、レジストリエディタを立ち上げます。
② 左のメニューから、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Common\FilesPaths
に移動してください。このなかから、mso.dll を探し、右クリックで名前の変更をします。
何か別の名前に付け替えてください。
これでようやく、PADでSQLも使えるうえ、Accessも正常に使える環境設定が完了しました。
次は話をPADに進めましょう。
※ なお上記の設定の仕方は、CADソフト(?)のヘルプサイト↓を参考にさせていただきました。
Autodesk様、ありがとうございます。
(Autodesk Support)
32 ビット版 Microsoft Office と一緒に 64 ビット版 Microsoft Access データベース エンジンをインストールする方法
SQL接続の設定
PADでSQLを使用する際の基本的な流れは、
1. SQL接続を開く > 2. SQLステートメントの実行 > 3. SQL接続を閉じる
です。2. のアクションで、抽出結果がデータテーブル変数として格納されることになります。
まずSQL接続を行いましょう。
使うアクションは、データベース グループの SQL接続を開く です。
設定画面を開く
SQL接続アクションを配置したら、接続文字列の入力欄右アイコンから設定画面を開きます。
プロバイダーの選択
4つのタブを順に設定していきます。まずプロバイダー タブでは、
Microsoft Office 16.0 Access Database Engine OLE DB Provider を選び、次のタブへ進みます。
ファイルパスの入力
次の接続タブには、データソース欄に操作対象Excelのファイルパスを入れます。
権限を設定する
次の詳細設定タブは、データベースへのアクセス権限に関するものです。
本物のデータベースでもないですし、とりあえず ReadWrite と Share Deny None に
チェックを付けておけば十分でしょう。
追加プロパティの入力
最後の すべて タブでは、Extended Propertiesをクリックして、プロパティの値に、
Excel 12.0 Xml
と入力し、OKしてください。
接続のテスト
これで準備完了です。
2番目の接続タブに戻って、接続のテスト をクリックしてください。
成功のメッセージが表示されればOKです。
接続設定は完了したので、アクションを保存して閉じてください。
SQL文を記述する際のTips
あとは、SQLステートメントの実行アクション内 に、SQL文を書いていけば良いのですが、
いくつか注意点を書いておきます。
From句の書き方:シート指定
まず、SQL文の Select 列名 From テーブル Where 条件 のうち、
From部分についてですが、[シート名$] のように書きます。
仮にシート名がSheet1 だったら、[Sheet1$] になります。
これでシートの1行目から読み込まれ、1行目は列名(ヘッダー)として解釈されます。
From句の書き方2:データ範囲の指定
データ範囲がシートの一行目から開始しない場合は、From句には、[シート名$データ範囲] のように指定します。
例えば、[Sheet1$A4:D20] のような形です。
さらに、もしデータ範囲の行数が一定でない場合は、先にPADのExcel標準アクションで最初の空行を割り出しておいて、空行番号の変数 マイナス 1という範囲指定をすれば良いでしょう。
例えば、[Sheet1$A4:D20] の最終行が一定でない場合は、
[Sheet1$A4:D%FirstFreeRowOnColumn - 1%]
のようにすれば良いことになります。
ワイルドカード %(パーセント)のエスケープの仕方
SQLではWhere句に、LIKE演算子と %(パーセント)を使って、部分一致を条件指定することが出来ます。しかしPADにおいて%(パーセント)は変数を表す際に使われるので、エスケープする必要があります。
やり方はシンプルで、%を2回繰り返せばOKです。
例えば、製品名が 「い」 で始まる、という条件は、
Where 製品名 Like 'い%%'
となります。
おわりに
今回は、32bit Office環境でPADのSQLアクションを使うための設定と、
接続文字列やSQL文で躓きそうなポイントに絞ってご紹介しました。(私も長きに渡り、躓いておりました。)
SQL文自体は、ある程度基本文法さえ理解できていれば、AIに(コメントも)書いてもらえば良いと思っています。INSERTやUPDATEも出来ますので、データの更新もやろうと思えばできます。
PADの標準Excelアクションでやりにくいところは、SQLで補う形でうまく使うと楽になると思います。