【Power Automate Desktop】選択した期間・決算月からカレンダーデータ(Excelファイル)を作成する
- 1.やりたいこと
- 2.フロー作成の要件(概要)
- 3.実践① フローの作成 ~ ダイアログの設定等
- 4.実践② Excelの起動 ~ 列見出しの書き込み
- 5.実践③ ループ処理/Excelワークシートへの書き込み
- 6.実践④ Excelファイルの保存
- 7.フローの実行
- 8.さいごに
1.やりたいこと
下図に記載の通り、PADフローを実行して対象期間及び決算月を選択すると、対象期間の年月日、曜日、年度、期(上下)、四半期をExcelファイルに転記してデスクトップに保存します。年度、期、四半期は企業によって様々ですので決算月を選択することでこれに対応できるようにします。
2.フロー作成の要件(概要)
- ダイアログで対象期間(開始日/終了日)、決算月(月のリスト)を選択する。
- 対象期間選択時の初期値は現在日付とする。
- 上記ダイアログでCancelした場合はフローを停止。
- ループ条件(開始日<=終了日)でエクセルに日付を書き込む。
- 曜日、年度、期、四半期列はPAD変数を用いてワークシート関数を書き込む。
- デスクトップに名前を付けてエクセルを保存する。
- ファイル名は、” Calendar(開始日_終了日).xlsx ”とする。
3.実践① フローの作成 ~ ダイアログの設定等
コンソール画面から 新しいフロー をクリックします。
任意のフロー名を入れて作成をクリックします。
デザイナー画面が立ち上がります。
【現在の日時を取得】
アクション → 日時 → 現在の日時を取得します をダブルクリック(又は画面中央にドラッグ&ドロップ)します。
下図の通り選択し保存します。生成された変数はデフォルトのCurrentDateTimeのままとします。
【datetime をテキスト(yyyy/M/d形式)に変換】
アクション → テキスト → datetimeをテキストに変換をダブルクリックします。
下図の通り選択・入力し保存します。
※登録済の変数は右端の{ⅹ}をクリックして選択可能です。
生成された変数は、CurrentDate とします。
変数名をクリックすると変更できます。変数名の頭と末尾は%で囲みます。(確定すると%の表示は消えます)
【対象期間選択のダイアログ設定】
アクション → メッセージボックス → 日付の選択ダイアログを表示 をダブルクリックします。
下図の通り選択・入力し保存します。
1つ目の日付を StartDate、2つ目の日付を EndDate としています。
【日付選択のダイアログ入力がキャンセルされた場合の設定】
日付選択時にキャンセルされた場合はメッセージボックスを表示後、フローを停止します。
アクション → 条件 → If をダブルクリックします。
下図の通り選択・入力し保存します。
アクション → メッセージボックス → メッセージを表示をダブルクリックします。
下図の通り選択・入力し保存します。表示するメッセージは任意の文言で構いません。
アクション → フリーコントロール → フローを停止する をダブルクリックします。
下図の通り選択し保存します。If の中身はここまでです。
ここまでのフローは下図の通りです。
【決算月を選択するリストのダイアログを設定】
アクション → メッセージボックス → リストから選択ダイアログを表示 をダブルクリックします。
下図の通り選択・入力し保存します。
選択元のリストは、一月ずつ改行して入力します。一般に3月決算の企業が多いと思いますので、リストは3月始まりにしましたが、順番は変えても問題ありません。
選択したリストはテキストとして、ClosingMonth という変数に格納します。
下図2つ目の変数(選択する項目のインデックス番号)は今回は使わない為オフとしています。3つ目の変数名は先ほどと同じ名称 ButtonPressed の為ここで上書きされますがフローに影響はないのでそのままで大丈夫です。
【決算月選択のダイアログ入力がキャンセルされた場合の設定】
決算月選択時にキャンセルされた場合はメッセージボックスを表示後、フローを停止します。ここは先ほどの日付選択時のキャンセル時とまった同じ操作・入力となりますので画面説明は省略します。
設定後のフローは下図の通りとなります。
4.実践② Excelの起動 ~ 列見出しの書き込み
アクション → Excelの起動 をダブルクリックします。
下図の通り選択・入力し保存します。インスタンスを表示する:をオンにすると実行時に時間が掛かる為、オフにしています。
アクション → Excel →Excelワークシートに書き込み をダブルクリックします。
下図の通り選択・入力し保存します。
2~5列目も同様にExcelワークシートに書き込みアクションにて書き込む値と列のみ変えて設定します。(画面は省略)
この部分のフローは下図の通りです。
5.実践③ ループ処理/Excelワークシートへの書き込み
ここからは日付等をExcelへ書き込むための設定をしていきます。
【ループ処理用の変数を2つ(行と日付のカウンター)設定】
アクション → 変数 → {x}変数の設定 をダブルクリックします。
下図の通り入力し保存します。これは書き込む行のカウンター用です。
同様にループ用の日付変数も設定します。これは日付の書き込みにも使います。
【ループ処理の設定】
アクション → ループ → ループ条件 をダブルクリックします。
下図の通り入力し保存します。
先ほど設定したVardateがEndDate以下である限りループ処理が続きます。
ここからループ処理の中身を設定していきます。
【ループ用日付を書込み用日付に変換】
アクション → テキスト → datetime をテキストに変換 をダブルクリックします。
下図の通り入力し保存します。
【各項目をExcelシートへ書き込む】
アクション → Excel → Excelワークシートに書き込み をダブルクリックします。
■日付の書き込み
※以下、Excelワークシート関数を書き込んでいきますが数式自体の説明は今回省略します。数式の一部はこちらの記事を参考にさせていただきました。
■曜日の書き込み
書き込む値:
=TEXT(A%RowCount%,"AAA")
実際にExcelに書き込まれる数式(初回)
=TEXT(A2,"AAA")
■年度の書き込み
書き込む値:
=TEXT(YEAR(EDATE(A%RowCount%,1-IF(%ClosingMonth%=12,1,%ClosingMonth%+1))),"@")
実際にExcelに書き込まれる数式(決算月3月の初回)
=TEXT(YEAR(EDATE(A2,1-IF(3=12,1,3+1))),"@")
※計算結果を値にするためにTEXT( "@")をいれていますが、数値としたい場合はこの部分は不要となります。
■期(上期・下期)の書き込み
書き込む値:
=IF(A%RowCount%<EOMONTH(DATE(C%RowCount%,IF(%ClosingMonth%=12,1,%ClosingMonth%+1),1),5)+1,"上期","下期")
実際にExcelに書き込まれる数式(決算月3月の初回)
=IF(A2<EOMONTH(DATE(C2,IF(3=12,1,3+1),1),5)+1,"上期","下期")
■四半期の書き込み
書き込む値:
=INT(MOD(MONTH(A%RowCount%)-IF(%ClosingMonth%=12,1,%ClosingMonth%+1),12)/3)+1&"Q"
実際にExcelに書き込まれる数式(決算月3月の初回)
=INT(MOD(MONTH(A2)-IF(3=12,1,3+1),12)/3)+1&"Q"
書き込み処理はここまでとなります。
【各変数のカウントアップ】
アクション → 日時 → 加算する日時 をダブルクリックします。
下図の通り入力し保存します。
アクション → 変数 → 変数を大きくする をダブルクリックします。
下図の通り入力し保存します。
ここまででループ処理の中身は完成です。フローは下図の通りです。
6.実践④ Excelファイルの保存
【ファイル名付加用の日付を取得】
アクション → テキスト → datetimeをテキストに変換 をダブルクリックします。
下図の通り入力し保存します。
次も同様です。
Excelファイルの保存先をデスクトップとするため、特別なフォルダを取得します。
アクション → フォルダ → 特別なフォルダーを取得
下図の通り入力し保存します。特別なフォルダーの名前でデスクトップを選択すると、次のパスは自身のデスクトップパスが自動表示されます。
【Excelファイルに名前を付けて保存する】
アクション → Excel → Excelを閉じる をダブルクリックします。
下図の通り入力し保存します。
ドキュメント パス: %SpecialFolderPath%\Calendar(%FilenameDate1%_%FilenameDate2%).xlsx
これでフローの設定はすべて完了です。最後の部分のフローは下図の通りです。
画面上の保存ボタンをクリックしてフローを保存後、デザイナー画面を閉じます。
7.フローの実行
コンソール画面から実行ボタンをクリックします。
対象期間の選択ダイアログが表示されます。初期値は何れも現在日付です。
対象期間を入力しOKをクリックします。
今回は2021年4月1日~2022年3月31の1年間としました。
決算月を選択ダイアログが表示されます。
今回は3月決算としますのでそのままOKをクリックします。月を変更する場合は右端のボタンをクリックして表示されたリストから選択します。
暫くすると処理が完了し、画面右下に完了通知が表示されます。(通知設定ONの場合)
今回1年分の処理時間は 32秒でした。
デスクトップにファイルが保存されました。開いてみます。
列幅が元のままできれいに表示されていないので適当に自動調整します。
最下行まで正しく作成されていることが確認できました。
下図は最後の入力セルE366にカーソルを置いた状態です。数式バーで設定した数式が入力されています。PAD変数もきちんと置き換わっています。
8.さいごに
この記事を書いている途中で疑問が思いつきました。曜日、年度、期、四半期を数式ではなく計算した結果のテキストとして書き込むにはどうしたらよいか。
答えは簡単でした。ループ処理のところで、下図のように一旦数式をワークシートに書き込んだあと、同じ個所を読み取って変数に格納し、再度同じ個所にその変数を書き込めばテキスト化できました。
ただ、読み取り書き込みの処理が増えますので当然ながら処理時間も倍くらいに増えてしまいます。数式で処理するフローとは別にサブフローでテキスト化のフローを作っておいて、フローの最初にダイアログ選択を入れて分岐させるのがよいかもしれません。
以上となります。