0.はじめに
この記事では,クラウドに保存されたファイルへのリンクを含むメールを一斉に送りたい,という状況を想定しています.ファイルも送り先ごとに違うような場合,ファイルごとにリンクを生成してメールの本文に貼り付ける,という作業は,メール件数が増えると煩雑です.これを,Microsoft Power Automateで片付けよう,というのがこの記事の趣旨です.
1.Excelファイルとリンクを送りたいファイルをクラウド上に保存します
1.0 Excelファイルを用意します
まず,メールを送りたい送り先一覧を記したテーブルを含むExcelファイルをOneDriveかSharePoint上に用意します.ID,Name,Email,Statusの列を用意しています.複数名に一緒に送りたい場合は,1行にまとめておきます.(この例だと,IDが2である行は,2人一緒にまとめて送信する,ということです.)Statusの列は,既に送信済みである場合にSentと記録するために用意しました.

1.1送りたいファイルをOneDriveかSharePointに保存します
このとき,IDと紐付いた通し番号を含むファイル名をつけておきます.
2.Power Automateでフローを実行する
2.0フローの全体像
大まかなの流れとしては,手動でトリガーし,Excelファイルの情報を取得し,各行ごとに,行ID番号と紐付いたOneDrive上のファイルへのリンクを取得し,Outlookからメールを送る,というものです.
2.1手動でフローをトリガーします
空白から開始(Create from blank)でインスタントクラウドフローを選択して,フローの作成を始めます.
トリガーとしては,手動でフローをトリガーします(Manually trigger a flow)を選択します.

2.2 変数を初期化します
送り先の名前に様などの敬称をつける,という連結操作(concat)に用いる変数を最初に宣言しておきます.
コネクタは組み込み(Built-in)にある変数(Variables)を選択し,アクションとして変数の初期化(Initialize variable)を選びます.文字列の結合のために用いるので,種類(Type)は文字列(string)を選択します.

あとで,変数を宣言しようとすると,The operation 'Initialize variable' can only be used at top level.とエラーが出てしまうので,初めの段階で変数の初期化を行っておきます.
2.3 Excelで表内に存在する行一覧を表示する
コネクタのExcelを選択し,List rows present in a tableを選択します.

詳細オプションにFilter Queryという項目があるので,Status ne 'Sent'と記載します.neは'not equal'の略ですね.こうすることで,Status列がSentでない行だけ一覧として取得されます.
記事「Power Automateを使ってMicrosoft Teamsにメンバーを一括登録する方法」において,既に追加済みのメンバーをaddedと記録していたのと,同じやり方です.
Google Apps Script(GAS)のTutorial: Sending emails from a Spreadsheetのチュートリアル記事の中で,emailSentという列を設けて,重複送信を避ける,という説明があります.本記事のこのステップは,GAS×Spreadsheetの代わりにPower Automate×Excelでも同様なことを行ってみた,ということになります.
2.4 取得した各業に対して一連の操作を行う
次に,アクションを追加し,組み込みのコネクタのControlを選択し,Apply to eachを選びます.以前の手順から出力を選択という項目は,動的コンテンツ一覧に表示されるExcelのvalueを選択します.つまり,ステップ2.3で取得されたStatusがSentでない各行に対して,以下のアクションを行う,ということです.

2.4.0 OneDriveで共有用のリンクを生成する
コネクタとしてOneDrive(またはSharePoint)を選択し,共有用のリンクを生成します.リンクを生成するには,「共有リンクの作成」と「パスによる共有リンクの作成」の2種類がありますが,ここでは,パスによる共有リンクの作成を用います.

リンクの種類は,View(閲覧専用),Edit(編集可能),Direct(ダウンロード用)から選択できます.リンクスコープはAnonymous(リンクを知っているすべてのユーザー, Anyone with the link)かOrganization(リンクを知っている組織内のユーザー, People in the organization with the link)を選択することができます.
2.4.1本文中の宛名用に名前に「様」と読点(コンマ)を連結する
このステップは,Excelテーブル内の名前に,様とコンマを追加して,「〜様,〜様」とメール本文に記入するためのステップです.今回は,Power Automateの機能を活用してみたくて,このように書きましたが,Excel関数のCONCAT()を使って,Excelテーブル内に,様付きの名前の列を用意しておいて,メールに読み込む方が,楽なのでは,と思います.

2.4.1.0変数の設定
まず,Set variableで変数を設定します.Nameという変数にダイナミックコンテンツのExcelテーブル当該行のName_1という値を設定します.

2.4.1.1文字列の連結
次に,今設定した変数と,文字列の"様"を式concatを用いて連結(concatenate)します.コネクタは組み込み(Built-in)のデータ操作(Data Opereation)を選択し,アクションは作成(compose)を用います.

コードのプレビューを見ると,以下のようになっています.コードのプレビューは3点リーダーをタップすると,選択肢に表示される,そこから確認できます.

2.4.1.2複数送り先がある場合
1行に送り先が2人いる場合は,2人目の名前にも様をつけます.Conditionのはい,いいえで分岐させ,ダイナミックコンテンツのName_2がnull(空白)に等しくないときは,Name_2と様を連結させ,nullに等しい場合は,何もしません.
2.4.3Outlookでメールを送信する
OutlookのSend an email(V2)を用いて,メールを送信します.宛先は,ダイナミックコンテンツのEmail_1およびEmail_2を,セミコロンで区切って並べておきます.本文Bodyですが,名前と様を連結して得られたOutputsを利用します.OneDriveのファイルへのリンクも挿入しておきます.

3.フローを実行する
フローを保存したら,手動でトリガーしてテストしてみます.問題なくフローが実行されました.

受信ボックスを見ると,OneDrive内のファイルへのリンクが挿入されたメールが届いていました.

4.最後に
複数の方に,異なるファイルへのリンクをメールで送りたかったので,このフローを作成しました.Power Automateに慣れたいということで,「様」を付けるのもPower Automate内でやってみましたが,実用上はその部分はExcel内でやった方が早いと思います.

