前回作成したフローのトピックを説明していきます。
特別なフォルダーを取得
ファイルの置き場所は、使用する人によって変わります。通常、デスクトップは C:\Users\xxxxxx のようになっており、xxxxxxの部分はログインユーザー名が使用されます。ログイン名が変われば、当然その部分は変わりますし、人によっては、デスクトップを別のドライブ、ディレクトリに変更している人もいます。
Power Automate Desktopは、「特別なフォルダーを取得」で、デスクトップやドキュメントなどの特別フォルダー(Special Folder)の場所を取り出し、フォルダーのパスが変数に入ります。(英語では Special Folderと言います。日本語では特別フォルダーや特殊フォルダーと記述されますが、どちらも同じものを指します)
特別なフォルダーの名称を開くと、いくつもの名前が並びますが、よく使うのはドキュメント、デスクトップです。規定では、フォルダーのパスを示す %SpecialFolderPath% という変数が生成されます。画面上にはフォルダーのパスが表示されていますが、違う環境になれば、この表示は自動で変更されます。
このフォルダーを使ってフォルダーやファイルの操作を行います。下の例では、デスクトップのパス %SpecialFolderPath% に続けて、エクセルファイル \personal_information1000.xlsx を開く処理を行っています。スペシャルフォルダーの後ろには、表記では 「\」 になっていますが、日本語キーボードの「¥」をつけてファイル名やフォルダー名をつなげてください。
最後、エクセルを保存する場合も、%SpecialFolderPath% を使って保存します。
OneDriveのフォルダーを取得
その他、OneDriveのフォルダーの場所は、環境変数を使って取得することができます。OneDriveは「OneDriveConsumer」、OneDrive for Businessは「OneDriveCommercial」という環境変数にパスが設定されていますので、以下のように設定します。
もし、OneDriveがインストールされていない環境が混在する場合は、先の「特別なフォルダーを取得」を先に実行させ、同じ変数 %SpecialFolderPath% にOneDriveのパスを入れるようにしてやります。OneDriveの環境変数がない場合はエラーになるので、エラー発生時は次のアクションに移動するように設定します。
これで、OneDriveがある環境なら、OneDriveのパス、なければ特別なフォルダーのパスを取得するように設定できます。
OneDriveにファイルを作成して、Power Automateを走らすという使い方もできますね。
GoogleドライブやDropboxについては、やり方がわかりませんでした。ご存じの方、教えてください。
リストで並び替えする
変数アクションの中に、リストの処理についてのものがあります。
アクション | 内容 |
---|---|
リストの作成 | 空のリストを作成します。変数を作成するかしないか選べますが、作成しない場合の利用方法は不明です |
項目をリストに追加 | 作成済みのリストに項目を追加します |
リストのクリア | リストの内容を削除し、空の状態にします |
リストから重複する項目を削除 | 項目で重複する項目を削除し、ユニークな値のリストにします |
リストの統合 | 2つのリストを1つに統合します。 |
リストから項目を削除 | リストの中から特定の値を削除します。削除したい値がリストに含まれていない場合はエラーになります。 |
共通リスト項目の検索 | 2つのリストに共通する値のリストを作成します。並び順は最初のリストの順になります。 |
リストの内容を減らす | 1番目のリストの中から2番目のリストの項目を削除します。1番目のリストに同じ削除対象の項目が複数あっても削除されます。 |
一覧の並べ替え | リストの値を昇順に並べ替えます。 |
リストを逆にする | リストの値を降順に並び替えます。 |
リストのシャッフル | リストをランダムに並び替えます。 |
データテーブル列をリストに取得 | データテーブルの列を取り出し、リストを作成します。 |
各アクションを頭に入れて、使い方を工夫すると、様々なことができます。
簡単なのは、数字をつけて「一覧の並び替え」を使えば、小さい順に並び替えが行えます。今回の並び替えでは、項目が日本語で、最初の出身地リストが出現順に項目が入っているので、工夫が必要になります。
出身地リストと別に、既に整列済みの都道府県リストを作成します。そのリストと出身地リストで「共通リスト項目の検索」を行うと、都道府県リストの並び順のままで、出身地リストにない項目は削除されたリストができます。
リストを「変数の設定」で作成する方法
リストの作成、項目の追加で作成する代わりに、「変数の設定」で一括でリストを作成することもできます。
%[ と ]% の間に、項目をカンマで区切ります。ちょっと癖のある書き方ですが、覚えておくと便利です。
%[1, 2, 3, 4, 5]%
文字の場合は、 ' (シングルクオーテーション)で囲みます。
%['a', 'b', 'c', 'd', 'e']%
これだけの操作で色々な処理が可能ですが、リストを使用した操作について、**Zero Sysさんの「Power Automate Desktop の変数(5)「リスト型」」**に更に細かく書かれています。
リスト項目の検索を使って並べ替える
変数の設定で 値 IN リスト を使うと、値がリストの中に存在するか調べることができます。これを使って2つ目の並び替え方法を作ってみます。
今回は、TodoufukenList をループ処理します。
TodoufukenListに存在する場合のみ、処理を行うようにするため、INを使って評価をします。
ループは必ず TodoukenList の項目数行われますが、1000件よりは少ない回数で済みます。
カスタムオブジェクトのリストで並び替える
Power Automate Desktopでは、JSON形式の値を変数に設定することができます。これをカスタムオブジェクトと言います。変数の設定では、%{'Name':Value}% のように設定します。JSONは、文字を「"」(ダブルクォーテーション)で囲みますが、Power Automate Desktopは「'」(シングルクオーテーション)なので、ご注意。
%{ 'Name': 'Tokyo', 'Value': '03' }%
設定した値は、%CustomObject.Name% あるいは %CustomObject['Name']% のようにして取り出すことができます。%CustomObject.Name の書き方は、エラーになって入力できないことがありますので、その場合は %CustomObject['Name']% を使ってみてください。
%CustomObject.Name%
%CustomObject.Value%
%CustomObject['Name']%
%CustomObject['Value']%
カスタムオブジェクトをリストにして操作すると、少し凝ったことができます。例えば、都道府県リストを以下のような地域分けの項目を追加し、地域分けに対応したシートに振り分けることも出来ます。以下概略のみ説明しますので、興味のある方はチャレンジしてみてください。
カスタムオブジェクトのリストは、Excelから読み取ったデータテーブルをループさせて作ります。
%{ 'No': CurrentItem2[0], 'Todoufuken': CurrentItem2[1], 'Block': CurrentItem2[2] }%
カスタムオブジェクトのリストをループに使用します。
アクティブなExcelワークシートの設定で、まだシートが作られていない場合はエラーになりますので、サブフローでシートの作成処理を行い、次の処理に続けます。
ページ設定などのシートの設定は、Blockのリストを作成して、まとめてやります。
最終的に、このようなシートを作ることができます。
こんな面倒なことしなくても、データテーブルでいいじゃないかという意見もあると思います。今回は、この機能を使っていませんが、カスタムオブジェクト・リストには、カスタムオブジェクトの項目を使った並び替えができるからです。
「一覧の並べ替え」を開くと、「リスト項目のプロパティで並べ替え」というスイッチがあります。これを開いて並べ替えの基準にする最初のプロパティで、カスタムオブジェクトの項目を入力し、昇順、降順を選択して並び替えることができます。更に、並び替えの項目は、複数を使うことができるので、並び替え機能としては、高機能です。ただし、数値として並び替えをしてくれるのではなく、文字列扱いのため以下のようになってしまうので、一筋縄でいかないのですが。
Excelでセルを指定するときの列の表記法
Power Automate DesktopでExcelを操作で、セルの列の指定方法は、A1形式のアルファベットで示す方法と、R1C1形式の数字で示す方法の両方が使えます。以下のように列を A としてもいいし、 1 と入れることもできます。通常はアルファベットの方が使いやすいですが、ループや計算式の結果で示したいときは、数値にすると便利です。
混在させても、動作します。