ついにMicrosoftがVBAを本気で滅しにきたようです。我々VBAerがお払い箱になる日もそう遠い未来ではないでしょう。合掌。
GUIプログラミングの時代がやってくる
プログラミングは人間の意思をコンピューターに伝える手段です。究極の方法は考えただけでコンピューターに伝わる脳波インターフェイスですが、これはまだ最先端の技術で、現状では仕方なくキーボードから定められた形式で文字を入力して伝えるという手段をとらざるを得ないわけです。いうなれば、プログラミングの世界は長らくCUIしか選択肢がなかったのです。
脳波の一歩手前は声での操作ではないかと思いますが、これはアプリではかなり実用的なレベルになっていて、音声操作が可能なものはたくさんあります。
さらに一歩手前に「やりたいことを選んでいくだけ」という段階があります。世のアプリではこれをGUIという形で実装していて、もはやできて当たり前、できない方が希ですが、プログラミングでは子供向けの Scratchなどで学習用途で実現できているに過ぎませんでした。
このScratchライクな操作でOfficeアプリに限らず、さまざまなWEBサービスを自動化できてしまうのが、Microsoft Power Automateです。プログラミングの世界がやっとGUIになります。新たな時代の潮流を感じずにはいられません。
・・・風が、・・・くる!・・・
Power Automateについて
Power AutomateはMicrosoft365(旧Office365)のアプリのひとつでアカウントを持っていれば利用できます。基本は追加料金なしで利用できますが、TeamsやSharePointなどに組織アカウントが必要になったり、有料プランでのみ使える機能があったりします。個人で使うというよりは、会社での業務に使うことが想定されています。
Power Automateの操作はいたって簡単でアプリでやりたいことを選択肢から選んでいくだけです。有名どころのアプリを組み合わせた処理はあらかじめテンプレートが用意されていて、それらをもとに自分のパラメーターに書き換えるだけでも使えます。
今回は「Outlook.com のメールの添付ファイルを OneDrive に保存する」テンプレートをベースに多少手を加えて自動化してみます。
テンプレートからフロー作成
Power Automate自体はクラウドベースのアプリでhttps://japan.flow.microsoft.com/からMicrosoft365アカウントでログインして利用します。URLに名残があるflowというのはPower Automateの前身のアプリらしいです。
左側のメニューからテンプレートを選択すると、利用できるテンプレートが一覧表示されます。使いたいテンプレートを選択すると次のような画面になり使用されるアプリへのアクセス権のチェックが行われます。
下の方にテンプレートのフローで使用されるアプリ一覧が表示されています。フローとは一連の自動操作のまとまりのことを言います。「このフローの接続先~」にチェックマークがついているものはすでに利用できる状態になっています。
現時点のログイン情報では接続ができないアプリ、たとえば私がまだ接続を許可していないYouTubeをフローに入れようとすると次の画像のようになります。+マークをクリックするとログイン画面に遷移します。
アプリ(やWEBサービス)が利用できるアカウントでログインする必要があります。SharePointなど企業アカウントでなければ使えない機能は、個人アカウントではあきらめましょう。
ログイン時には自動操作の許可を求められます。Power AutomateからメールやOneDriveにアクセスするけど、いいよね?ということです。許可します。
フローの作成ボタンを押すと、テンプレートからフローが作成されフローの概要画面になります。
今回のテンプレートの場合、この時点ですでに「Outlook.com のメールの添付ファイルを OneDrive に保存する」ことができるようになっています。
ためしにメールを自分のOutlook.comのアドレスにファイルを添付して送ってみると、私の環境ではタイムラグが結構あり、おおむね送信から10分程度でOneDriveのEmail attachments from Flowというフォルダ(なければ作成される)の
中にメールの添付ファイルが保存されました。
やべぇです。おそるべき簡単さ。これをVBAオンリーでやろうとしたら並大抵のコード量では済まないでしょう。
フローの編集
Power Automateがテンプレートからどのようなフローを作成したのかは概要画面の編集から確認できます。
フローが表示されます。
アプリアイコンと説明文の短冊が表示されます。この短冊をステップと呼びます。フローという名が示す通り、ステップは上から下へ順次実行されます。一番最初のステップは特にトリガーと呼ばれます。
トリガーはフローの起点となる何かしらのイベントを設定します。今回の場合「On new email」すなわち「新しいメールが届いたとき」です。Power Automateはイベントドリブンということです。VBAerにはイベントドリブンはおなじみですよね。
それぞれのステップをクリックすると詳細なパラメーターを確認できます。
トリガー「On new email」ではパラメーターとしてOutlook.comの新着メールを監視するフォルダを指定しています。
デフォルトでは受信フォルダのルートになっています。フォルダアイコンをクリックすると、サブフォルダに変更できます。詳細オプションを表示するで件名、差出人他いろいろ条件を指定することができます。
次段の「Apply to each Attachment on the email」ステップはメールの添付ファイルに対して総当たり処理をしていくループです。VBAでいうところのFor Eachに相当します。
ネストされている「Create file」ステップでOneDriveへ添付ファイルを保存しています。
各パラメーターの指定はフォームをクリックすると、次の画像のような選択肢が表示されるので、そこから選んでいくだけです。
では、新たなステップとしてOneDrive上のExcelファイルに新着メールの情報を書き込んでみます。書き込む用のブックを次の画像ような書式で用意しました。Power Automateから選択しやすいようにテーブルとして作成しています。これをmail.xlsxとしてOneDriveに保存しました。
フローの新しいステップボタンで、ステップを追加します。そのままだと、めちゃくちゃたくさん選択肢があるので、検索でExcelに絞ります。Excel Online(OneDrive)を選びます。
アクションにできることが一覧表示されます。VBAでいうところのメソッドです。下までスクロールしていって表に行を追加を選びます。
表に行を追加ステップが新たに作成されます。パラメーター設定はファイルとテーブルを指定すると、そのテーブルの列名が表示されます。テーブルの列名に対応するメールの項目を選択肢からポチポチしていくだけです。こうなりました。
ちなみに添付ファイルをパラメーターに持たせると自動的にこのステップをApply to eachでラップしてくれます。つまり空気を読んで添付ファイルが複数あった場合でも大丈夫なようにしてくれます。
「おまえ、それをやるんだったらループでまわさないとダメだぞ。ったく、しょーがねーなオレがやっとくからよ」ってことです。すごすぎ。VBEには一生真似できないイケメンぶり。私が心酔するIntelliJ IDEAに近づいていますね。
フローの一番最後にある保存ボタンでフローの変更を確定します。
メールにファイルを添付して送信し、しばらく待つと
指定したExcelのテーブルにメール情報が追加されました。簡単すぎ。ヤベぇでしょ・・・。
あなたも今すぐはじめるべきです。
まとめ
Power Automateはまだまだ進化していくのではないかと思います。AIに取って代わられなくなる職業、確率95%でプログラマーがいよいよ現実味を帯びてきました。Power Automateネタは面白いので今後もやっていきたいです。
つづく。
つづきができました。