Power Automate Desktop を使ってOutlookメールを自動で送る①

みなさんこんにちは。このブログでは、Power Automate Desktopを使った自動化の事例をご紹介いたします。

 

今日は、Power Automate Desktop(以降PAD)とOutlookを使って、あらかじめエクセルに用意しているメール原稿を自動で送信する。というプログラムを用意します。

たとえば、10人の従業員の方に、それぞれ異なった文面のメールを自動で送る。というプログラムを作ってみましょう。

この記事は初めてPADを使う方でもトレースできるように、ひとつひとつの作業を解説しています。

1.エクセルデータを用意する。

まず、送信したい10人の方の氏名、メールアドレス、メールタイトル、メール本文をエクセルで作成します。下記のようなシートを用意しました。このエクセルファイルをPCのデスクトップに保存します。この時、リストのシートをアクティブの状態にしてエクセルを保存してください。エクセルのファイル名はmailsend.xlsxとしました。

このような作業、結構多いですよね。今でも、手作業でPCにインストールされているメーラをつかって必死にエクセルの内容をコピペして送っている方がたくさんいらっしゃいます。これ時間の無駄。

リーンでいうところの従業員の創造性を使わないムダ。

 

2.PADでコードを書く

では、実際にPADを使ってコードを書いていきます。

PADを起動する

まずはPADを起動します。起動すると下のような画面になります。

左上の「+新しいフロー」をクリックすると、新しいクローが作成されます。

作成するフローの名称を入力し、作成をクリックしてください。今回はメール送信というフロー名にしてみます。

下のようなフロー画面が出てきます。

 

これがPADの開発画面です。左側にあるアクションリストなかから適切なアクションをドラッグして、真ん中のエリアにドロップします。PADはここに並べられアクションを上から下に順に実行します。

エクセルファイルを読み込む

まず最初に、先ほど作成したエクセルファイルの内容を読み込みます。PADのフロー画面の左側のアクションの欄の>Excelをクリックしてください

と、直下に出てくる詳細をクリックしてください。

これだけのエクセル操作をPADで実行することができます。また、エクセルファイルのマクロを実行することもできるので、PAD上でエクセルのほとんどの操作を実行することができます。

うまく活用すれば、エクセルのマクロを定時に実行することも可能です。こちらはまた別の記事で紹介します。リストの名から「Excelの起動」をドラッグして、中央のキャンバスにドロップします。

すると自動的に詳細を入力する画面が開きます。

一番上のExcelの起動は「空のドキュメントを開く」となっているので、「次のドキュメントを開く」を選んでください。するとドキュメントパスの項目が出てくるので、右側のアイコンをクリックするとファイルを選択する画面が出ますのでここで選び、下の保存をクリックします。

データの入力範囲を調べる

エクセルのシートにデータが入力されている範囲を確認し、その範囲のデータをPADに読み込みます。作成したデータは列はE列まで、5列。行はヘッダを含めて11行です。この情報をPADで読み取ります。この時は、左のアクションの「Excelワークシートから最初の空の列や行を取得」をドラッグして中央のキャンバスにドロップします。

自動的に詳細を入力する画面が開きます。

 

ここでExcelインスタンスの入力が必要ですが、先に作成したインスタンスが自動的に入ります。また、変数が二つ生成されます。FirstFreeColummは最初の空の行、FirstFreeColummは最初の空の列です。この後の処理で、この二つの変数を使って処理していきます。

実際にPADでこの二つの変数を取得できるかやってみましょう。

その前に、左の画面のアクションから

をドラッグして中央のキャンバスにドロップしてください。自動的に開く詳細画面はなにもせず「保存」をクリック。

 

データを保存

実行する前に必ず保存します。

画面中央上部の

アイコンリストからフロッピー(古)のアイコンをクリックすると保存されます。

 

プログラムの実行

では、さっそく実行してみましょう。アイコンリストの再生の三角形をクリックします。

画面を見てみましょう。

実行すると、一行ずつプログラムが実行されます。問題なく終了すると画面右側に実行結果が表示されます。確認してみましょう。

 

FirstFreeColumm(最初の空の列)は6,FirstFreeColumm(最初の空の行)は12

なので、データの最後の列は5,行は11ということになります。

ただしく、エクセルの情報を読み込んでいることがわかります。

 

データを読み込む

では、作成したエクセルのデータを読み込んでみましょう。

アクションのExcelワークシートから読み取る。をドラッグして中央のキャンバスにドロップします。この時、Excelを閉じるの行の前にドロップしてください。詳細画面が出ます。

 

 

取得の項目を「セル範囲の値」に

先頭列を1

先頭行を2(1行目はヘッダなので無視)

最終列を%FirstFreeColumn-1%

最終行を%FirstFreeRow-1%

 

最後の二つは、最初に読み込まれている値に―1を追加してください。

保存して、再度実行します。

終了しましたら、画面右のフロー変数を見ましょう

ExcelDataのインスタンスに5列、10行のデータが生成されています。ExcelDataをクリックすると収納されたデータを見ることができます。

「閉じる」をクリックすると閉じることができます。

 

ExcelDataに格納したデータを取り出してみる。

インデックスを使う

今回のレッスンでは5列10行のデータを生成しています。このデータを使って、この後はメールを送信するのですが、そのためにはExcelDataのすべての列行からデータを取り出してやる必要があります。

PADのアクションからメッセージボックス-メッセージを表示をドラッグして、中央のキャンバスにドロップしてください。

表示するメッセージの項目で{X}をクリックして、変数ExcelDataを選びます。そうすると

%ExcelData%という表示が出ます。これは%の間が変数であるということを意味します。取り出したいデータは二次元配列に収納されているのでExcelDataと右端の%に配列を表すインデックスを入れます。例えば0列0行は[0][0]とします。保存をクリックすると、以下のようになります。

ではこの状態で一度保存して、プログラムを実行してみましょう。以下のようなメッセージボックスが表示されれば成功です。

インデックスは、%ExcelData[行][列]%ですので、覚えてください。0行目の項目を順番に表示するのは、

%ExcelData[0][0]%

%ExcelData[0][1]%

%ExcelData[0][2]%

%ExcelData[0][3]%

%ExcelData[0][4]%

とします。PADはこのようになります。

For each,Loop文で処理を繰り返す

5列くらいのデータを処理するのであれば、上のようなプログラムでもいいですが、もっと多くの列を処理しないといけないとしたら大変です。こんな時はLOOP、FOR EACHを使ってみましょうインデックスを使って同じ処理を繰り返してくれるとても便利な変数です。

 

まずは、For eachを使って、各行のデータを取り出してみましょう。ここでもメッセージボックスを使います。アクションのループからFor eachをドラッグしてキャンバスにドロップすると次のように表示が現れます。

ここで、反復処理を行う値はExcelDataを選びます。保存先は自動でCurrentitemが生成されます。保存をクリックします。

次に各列の内容を表示してみましょう。アクションからメッセージボックス-メッセージを表示をドラッグして、中央のキャンバスにドロップしてください。

表示するメッセージを%CurrentItem%として、保存してください。

 

プログラムを保存して実行してみましょう。

1行目は

10行目は

と表示されれば正解です。では次のステップへ。

これでは、一つの処理で1行のデータが全部まとまった形で出てきてしまうので、これでは、すべての情報をひとつずつ取り出すことができないので、For each の中に、繰り返し処理を入れます。これをネストといいます。今回はLoopを入れてみます。まずLoopを作ってみましょう。アクションのループからLoopをドラッグしてキャンバスにドロップすると次のように表示が現れます。

開始値は0とします。終了はFirstFreeColumn-2とします。FirstFreeColumnは最初の空の行なので、最後の行は―1するのですが、さらにインデックスが0から始まるので―2とします。ここは注意してください。増分は1とします。保存をクリックします。次にアクションからメッセージボックス-メッセージを表示をドラッグして、中央のキャンバスにドロップしてください。

表示するメッセージを%CurrentItem[LoopIndex]%としてください。

そうすると以下のようなLoopが出来上がります。

 

そして次はこれを、先ほどのFor Loopの中に入れます。やりかたはLoopの行をSHIFTキーを押しながらENDをクリックすると、3行の色が暗くなります。そしてこれをドラッグして、For Loopの中にドロップすると、以下のようになります。

プログラムを保存し、実行します。

すると、1行の中で、各列のデータがすべて順番に保存できるかと思います。

 

これで、エクセルに保存した自動送信用のデータをすべて取り出せるようになりました。

まずは前編①はここまでです。次回後編では、いよいよOutlookを使いメールを送信します。

次回をお楽しみに。

 

今回作ったプログラム

 

最後までお読み下さり、ありがとうございます。

 

3.コード差し上げます。

実際に作ってみたがうまくいかないという方がいらっしゃいましたら。今回のレッスンのコードを無料で差し上げます。下のボタンからお問合せ下さい。オフラインでのレッスンも承りますのでお気軽に。

 

プライベートレッスン、グループレッスンのご案内

PADをもっと知りたいけれど、実際にやりたいことがわからなくてどんなレッスンを受ければいいかわからない!とお悩みの方はいらっしゃいませんか?当社では、お客様の課題を伺ったうえでプログラムを作成し、そのプログラムを使ったオンラインレッスンをご提供しています。詳しくはお問い合わせください。

 

 

免責事項

このブログで作成したプログラムは著作権フリー利用可能です。ただし、このプログラムを流用、改変して実施することによって生じた問題について責任は一切負いません。上記プログラムのコピーは免責事項について承知いただいたうえで実施するものといたします。