RPAコラムー第30回 Power Automate Desktop(Power Automate for desktop)でロボット作成(3/3)

前回コラムでは、ランキングデータを貼り付け、項目名を書き込む工程までを自動しました。

今回自動化する工程は、体裁の統一です。

今のエクセルの順位の部分を見ると、”〇位”となっているところ、そうでないところがあったりと統一されていない部分が見受けられます。

今回は、順位の項目に全て”位”を付け、体裁を統一する工程を自動化します。

繰り返しの回数を把握する

順位の形式を統一するにあたり、まずは現在の最終行の位置を確認する必要があります。

確認のために「Excelワークシートから最初の空の列や行を取得」を選びます。

↑前回と同じく、”%FirstFreeColumn%”には空白列が、”%FirstFreeRow%”には空白行が取得されます。

今回は項目名、1~50位までのランキングデータを記載しているので、空白が来るのは52行目となります。

次に、「Excelワークシートから読み取り」を使います。

今回の対象は順位のみのため、「先頭列」、「最終列」いずれにも”A”を入力します。

また今回は最初から最後まで取得したいため、「先頭行」には”1″を、「終了行」には先ほど取得してきた変数”%FirstFreeRow – 1%”を最終行に指定します。

詳細では「セルをテキストとして取得」、「範囲の最初の行に列名が含まれています」にチェックを入れましょう。

“%FirstFreeRow%”には、最初に空白が現れる行を指定しています。これに-1することで、値が入力されている一番最後の行を指定することが出来ます。

また、先頭行には項目名がはいっているため、”順位”と1~50までの値が入ってしまいますが、詳細にて「範囲の最初の行に列名が含まれています」にチェックが入っているため、”順位”を省き、1位から順に値を取得することが出来ます。

繰り返し処理

続いてLoop処理を用いて、先ほど取得した順位の値を整頓しつつワークシートへ書き込みます。

開始値には”0″、終了値には先ほど取得した変数を用いて”%RankExcelData.RowsCount – 1%”とします。

値の整理ですが、今回は「テキストをパディング」を用いて”〇位”となるように体裁を統一します。

まず「If」アクションを用いて場合分けを行います。

「If」とは、決められた条件に従って、それを満たすか満たさないかで次のアクションを分岐させるアクションです。

日本語で言う「もし~~なら」という表現と考えるとよいと思います。

「最初のオペランド」とは、対象の値を指します。

こちらには、”%LoopIndex_Padding%”を記載します。

「演算子」は条件を示します。

ここは”以下である”を選びます。

「2番目のオペランド」には条件の値が入ります。

こちらは”9″と入力します。

この「If」アクションは、”%LoopIndex_Padding%が9以下の場合~”という意味になります。3や7といったように、この条件を満たす値なら、以降のアクションへ進む、という流れになります。

なぜ「If」を用いて条件分けをするかというと、「順位」の文字数によって処理が変わるからです。

まずは「If」条件を満たす場合に行う処理を設定していきます。

今回使用するアクションは「テキストをパディング」です。

パディングアクションは、任意の文字数になるまで、テキストの右側か左側に任意の文字を追加する、というアクションです。

「パディングするテキスト」には、先ほど取得した順位の値と繰り返し処理の変数を用いて”%ExcelData[LoopIndex_Padding]%”と入力します。

「パディング」は右を選択します。

また、「パディングするテキスト」には”位”と入力します。

最後に「合計長」には”2″を入力します。

今回は順位の右側に”位”を入力し、文字の合計が2文字になるように調整するという設定をしています。

これは順位によって”〇位”の形になっていないものがあるためです。

If条件で設定したのは、”値が9以下の場合”という設定です。

つまり、1桁の順位については”位”を追加することで合計2文字になります。

また、既に”位”がついているものについては、合計長2文字という条件を満たしているため、追加で”位”がつくことなく処理されます。

逆に10以上(“位”込みで3文字になる)の順位については、「Else」アクションを用いて分岐させます。

「Else」は「If」アクションで示した条件を満たさない場合に行われるアクションのことです。

今回でいえば、順位が10以上の場合は「9以下の場合」を満たしていないので、「Else」以降のアクションへ進みます。

先ほどの処理とほとんど変わりませんが、「合計長」には”3″と入力します。

こちらでは、”位”と入力した際に合計3文字になるよう調整されます。

例えば順位が7の場合、一桁のためIfの処理が進み、”7位”となります。

順位が25の場合は、一桁ではないためElseの処理が進み、”25位”となります。

逆に、今回の処理をすべて合計長3にした場合、順位が一桁のものは”7位位”となってしまい適切ではないため、「If」アクションをつかって分ける必要がありました。

また、今回は順位が50位(2桁)まででしたが、100位以降(3桁)が出てくる場合は更に条件を分ける必要があります。

それでは、パディングを行ったデータをエクセルに書き込みたいと思います。

「Excelワークシートに書き込み」アクションで記載しましょう。

「Excelインスタンス」には”Ranking1_25%”を、「書き込む値」にはパディングした値”%PaddedText%”を記載します。

指定した箇所へ書き込むため、「書き込みモード」は”指定したセル上”を、「列」には”A”、「行」には”%LoopIndex_Padding + 2%”と入力しましょう。

“%LoopIndex_Padding%”は0から始まるため、エクセルへ書き込む際は+1する必要があります。

また、エクセルの1行目は項目名が入っている行なので、+2した”%LoopIndex_Padding +2%”とすることで、正しい箇所へ書き込みをすることが出来ます。

最後に、書き込んだエクセルを保存します。

アクションは「Excelを閉じる」を選びましょう。 

「Excelインスタンス」には”%Ranking1_25%”を入力します。

今回は保存をするので、「Excelを閉じる前」には”名前を付けて保存”を選びます。

「ドキュメント形式」は”Excelブック”を選びましょう。

「ドキュメントパス」では、保存先のパスを指定だけでなく、保存するエクセルの名称も指定することが出来ます。

今回はデスクトップ上に保存、また第1回で取得した日付の値を用い、ファイル名を”出演ランキング_%yearmonthday%取得”としています。

例として、第1回で取得した日付は2021年6月16日なので、その当日に作成された場合ファイル名は”出演ランキング_20210616取得”となります。

まとめ

ここまでの工程で、下記の様になっていれば想定通りです。

実際にロボットを実行し、正しく動くかどうか試してみてください。

今回はWeb上のランキングデータを取得しました。

交通費データの取得と異なり、様々な取得の方法や形式が必要になることがお分かりかと思います。

今回コラムの内容はもちろん、Power Automate Desktop(Power Automate for desktop)に関するお悩みがございましたら、ご気軽にご連絡ください。

Power Automate Desktop(Power Automate for desktop)に関するオンラインセミナーを開催予定です。

詳細はこちら

お問い合わせ

名古屋本社

東京本社

【受付時間】9:00~18:00

pagetop

お客様のお悩み承ります。