事前準備もバッチリ解説!
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を入れている場合、インストーラを実行しても
↓下のようなエラーが出てインストールできません。

Install Error
32bit Officeが入ってるから、64bit版はインストール出来ませんよ、のエラーメッセージ

エラーメッセージの指示通りに64bit版Officeをインストールするという訳にもいかないでしょうから、
一体どうすれば良いのでしょうか?

コマンドプロンプトからサイレントインストール

対応策ですが、32bit版Officeを利用している人は、コマンドプロンプトからサイレントインストールします。

⚠️ 注意
これからその対応策をご説明しますが、レジストリをいじくる、ちょっと強引なやり方です。
実際やってみるかどうかは、ご一読のうえ、ご自身の判断でお願い致します。

まず、コマンドプロンプトを「管理者として実行」で立ち上げてください。
Access Database Engineインストーラのファイルパスはコピーしておきます。

Command Prompt
Windowsメニューからコマンドプロンプトを出し、管理者として実行

コマンドプロンプトにはファイルパスを入力し、そのあとに /quietと入れて、
Enterで実行してください。(ファイルパスと/quietとの間にはワンスペース)

Silent Install
ファイルパスの後ろに /quietを加えることで、サイレントインストールになり、併存によるエラーを回避できます。

これで64bitのAccess Database Engineのインストールが出来ました。

ただしPADでSQLが使えるようにはなりますが、このままだとAccessが開けなくなってしまいます。
試しにAccessファイルを開くと、以下のメッセージが出てきます。

Access Error
無理やり64bitを入れたので、32bit Accessが使えなくなっています。

また、Outlookの予定表にも悪影響が出ることもあるようです。

そこで、レジストリに手を加える必要があるのです。

レジストリを変更する

Windowsのテキストボックス(虫眼鏡)にregeditと入力し、レジストリエディタを立ち上げます。

左のメニューから、

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Common\FilesPaths

に移動してください。このなかから、mso.dll を探し、右クリックで名前の変更をします。
何か別の名前に付け替えてください。

reg edit
ここではmso.dllをmsoVOID.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接続アクションを配置したら、接続文字列の入力欄右アイコンから設定画面を開きます。

Input Connection String
変数{x}の左隣にあるアイコンです。
STEP
1

プロバイダーの選択

4つのタブを順に設定していきます。まずプロバイダー タブでは、
Microsoft Office 16.0 Access Database Engine OLE DB Provider を選び、次のタブへ進みます。

Choose Provider
Microsoft Office 12.0 ~ でもOKです。
STEP
2

ファイルパスの入力

次の接続タブには、データソース欄に操作対象Excelのファイルパスを入れます。

Input File Path
ファイルパスを事前に変数化しておき、変数名をセットする形でも良いです。
STEP
3

権限を設定する

次の詳細設定タブは、データベースへのアクセス権限に関するものです。
本物のデータベースでもないですし、とりあえず ReadWrite と Share Deny None に
チェックを付けておけば十分でしょう。

Check Privilege
STEP
4

追加プロパティの入力

最後の すべて タブでは、Extended Propertiesをクリックして、プロパティの値に、

Excel 12.0 Xml

と入力し、OKしてください。

Add Property
接続対象がExcelであることを明示しています。
STEP
5

接続のテスト

これで準備完了です。
2番目の接続タブに戻って、接続のテスト をクリックしてください。
成功のメッセージが表示されればOKです。
接続設定は完了したので、アクションを保存して閉じてください。

Test Success
STEP
6

SQL文を記述する際のTips

あとは、SQLステートメントの実行アクション内 に、SQL文を書いていけば良いのですが、
いくつか注意点を書いておきます。

From句の書き方:シート指定

まず、SQL文の Select 列名 From テーブル Where 条件 のうち、
From部分についてですが、[シート名$] のように書きます。
仮にシート名がSheet1 だったら、[Sheet1$] になります。

Select Statement
対象のシート名がSheet1 だったら、[Sheet1$] になります。

これでシートの1行目から読み込まれ、1行目は列名(ヘッダー)として解釈されます。

From句の書き方2:データ範囲の指定

データ範囲がシートの一行目から開始しない場合は、From句には、[シート名$データ範囲] のように指定します。
例えば、[Sheet1$A4:D20] のような形です。

さらに、もしデータ範囲の行数が一定でない場合は、先にPADのExcel標準アクションで最初の空行を割り出しておいて、空行番号の変数 マイナス 1という範囲指定をすれば良いでしょう。

例えば、[Sheet1$A4:D20] の最終行が一定でない場合は、

[Sheet1$A4:D%FirstFreeRowOnColumn - 1%]

のようにすれば良いことになります。

First Free Row
先に2番目でFirstFreeRowOnColumnを割り出して、6番目で使っている

ワイルドカード %(パーセント)のエスケープの仕方

SQLではWhere句に、LIKE演算子と %(パーセント)を使って、部分一致を条件指定することが出来ます。しかしPADにおいて%(パーセント)は変数を表す際に使われるので、エスケープする必要があります。

やり方はシンプルで、%を2回繰り返せばOKです。
例えば、製品名が 「い」 で始まる、という条件は、

Where 製品名 Like 'い%%'

となります。

Escape Char

おわりに

今回は、32bit Office環境でPADのSQLアクションを使うための設定と、
接続文字列やSQL文で躓きそうなポイントに絞ってご紹介しました。(私も長きに渡り、躓いておりました。)

SQL文自体は、ある程度基本文法さえ理解できていれば、AIに(コメントも)書いてもらえば良いと思っています。INSERTやUPDATEも出来ますので、データの更新もやろうと思えばできます。

PADの標準Excelアクションでやりにくいところは、SQLで補う形でうまく使うと楽になると思います。