質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Power Automate Desktop

Power Automate Desktopとは、Microsoft Power Automateの一つ。Windows上で行うキーボードやマウス操作などの組み合わせをコードなしで自動化できます。さらにPythonスクリプトの実行やAI機能連携を始め、機能も豊富です。

Q&A

解決済

1回答

235閲覧

PowerAutomateDesktopで、特定のフォルダのファイル一覧を取得して順にExcelファイルを開いて処理したい

umioyo

総合スコア29

Power Automate Desktop

Power Automate Desktopとは、Microsoft Power Automateの一つ。Windows上で行うキーボードやマウス操作などの組み合わせをコードなしで自動化できます。さらにPythonスクリプトの実行やAI機能連携を始め、機能も豊富です。

0グッド

1クリップ

投稿2023/11/24 08:23

実現したいこと

  • 特定のフォルダのファイル一覧を取得して順にExcelファイルを開いて処理したい

前提

あるシステムから吐き出される同じ形式のExcelファイルが複数あるので、順に起動してPDFで保存、という作業をPowerAutomateを使ってやりたいと考えています。

発生している問題

「今開いたファイル」に対して作業を行いたいときにどうするか悩んでいます。
「Excelの起動」アクション実行時に、ExcelInstanceという変数にインスタンスが保存されているので、これを使うのかなと考えていますが、例えば「ウィンドウ内のボタンを押す」アクションを実行したいとき、UI要素の指定の中にExcelInstanceを指定できるようになっていません。

図でいうと
イメージ説明
赤線の部分になります。
赤線の部分は、Excelファイルを実際に記録してこのループ内にペーストしたものですが、すべて記録したときのExcelのファイル名においてのアクションの指定になっているので、ループが動作しているときに今開いているシートに対してこのボタンを押すなどの指定ができません。

参考までにUIコントロールの選択画面です。
イメージ説明
このように、UI要素は既存のウィンドウに対して選択できるようになっており、自由に入力できるようになっていません。

なにか代替する他のアクションを使えばいいのではないかと考えておりますが、ご教示のほどよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/11/25 02:11

できなくはありませんが、質問の内容なら、VBAを使った方が楽ですし確実だと思います。 VBAを使った方法は対象外でしょうか?
umioyo

2023/11/25 04:55

コメントありがとうございます。 ちょっとVBAでできる範囲がわかっていないですが、 ファイルの開く、閉じる、シート保護の解除、PDFの書き出し すべて可能でしょうか。 やはりこういう処理はPADには向いていないのでしょうか。
退会済みユーザー

退会済みユーザー

2023/11/25 08:22

こちらで分かる範囲で、PADでの方法を回答しました。 今回の、Excelファイルの開く、閉じる、シート保護の解除、PDFの書き出しと言った操作は、VBAすべて可能です。 Excelだけで完結することであれば、VBAの方が簡単です。 今回処理は、PADに向いていない処理、というわけではありませんが、「開いたエクセルのウィンドウ個別に処理する」といった、一見簡単そうな操作をしようとしたときに、途端にUIオートメーションやスクリプトの知識を要求されるのが、PADの難しいところです。 PADに向いているのは、エクセル以外のアプリ(特にウェブブラウザ)と連携する必要があるときですね。 PADは下記の点がデメリットです。 + 環境依存が激しい + 上のように「ちょっとしたこと」をやろうとすると、とたんに難しくなる。 + 操作をコード化できないので、他人に説明するときに面倒 + デバッグが面倒(メッセージボックスを駆使する必要がある、エラーが出ても、どんな変数が内部で発生しているのかがわかりにくい)
guest

回答1

0

ベストアンサー

ループの中で取得したエクセルウィンドウごとに、リボンのボタンをクリックするには、下記のような方法があります。

まず、質問と同じように、フォルダ内のファイル取得~For each ループを作り、その中にExcelの起動を配置した状態を作っておきます。
イメージ説明

ここで、処理対象のエクセルのうち、なんでもいいので1つ起動しておきます。


次に、PADで、アクションの検索ボックスに「ui」と入力し、「UIオートメーション」→「ウィンドウのUI要素をクリック」を選択します。
イメージ説明


「UI要素」の右にある「v」マークをクリックします。
イメージ説明


「UI要素の追加」ボタンをクリックします。
イメージ説明
※まだ追加されたUIがない場合(初回)は下の図の「UI要素の追加」ボタンをクリック。
イメージ説明


別途起動しておいた処理対象エクセルの「校閲」タブを、コントロールを押しながら左クリックします。
イメージ説明


PADのダイアログに戻って「保存」をクリックします。
イメージ説明


同様に、アクションから「UIオートメーション」→「ウィンドウのUI要素をクリック」を選び、「UI要素の追加」ボタンをクリック、
「校閲」タブの中の「シートの保護...」ボタンを、コントロールを押しながら左クリックします。
イメージ説明

同様に、PADに戻るので、「保存」ボタンをクリックします。
イメージ説明


(注意:少なくとも自分の環境では、「校閲」タブと「シートの保護...」を分けて追加しないとうまく動作しませんでした。「シートの保護...」ボタンを指定するだけでうまくいくかどうかは、環境依存である可能性があります)



ここからが重要です。
上まで終わったら、PADの右端の上のほうにある、縦に並んだメニューのうち、真ん中の、ダイヤ型が3つ重なったようなアイコンをクリックします。
(または、上部メニューの「表示」→「UI要素」を選択)
イメージ説明

そうすると、UIオートメーションで追加した要素の一覧が表示されます。

(もし以前から色々編集していたら、この部分はたくさんの部品が表示されているかもしれませんが、今回編集対象はこれまでの操作で作成された最新(一番下)のグループ、つまり

  • □ Window~~~
  • Tab item 「校閲」
  • Button 'シートの保護...'

となっているグループになります)

「□Window...」となっている行にマウスカーソルを当てると、右に縦の3点マークが出るので、そのマークをクリックします。
イメージ説明

「編集」をクリック。
イメージ説明

右上の「テキストエディター」のスイッチをonにします。
イメージ説明

テキストエディタ―の「[x] 変数の選択」に書かれている内容を一旦削除し、下記をコピペして内容を置き換えてください。
(先頭の「:」も忘れずに、そのままコピペ)

:desktop > window[Name^="%CurrentItem.NameWithoutExtension%"][Process="EXCEL"]

 
↑の意味は「起動中のウィンドウから、CurrentItemの拡張子を除いたファイル名で始まるEXCELのウィンドウを検索して指定」という意味です。

(コピペ後の状態)
イメージ説明


コピペ後、「保存」をクリックします。


ここまでで、下の図の状態になっていればOKです。
イメージ説明

注意:2つの「ウィンドウのUI要素をクリック」がFor Eachの中にない場合は、2つを(「Tab Item '校閲'をクリックする」→「Button'シートの保護'をクリックする」の順番で) For Eachの中に入れてください。

 

 

これで、個別のエクセルウィンドウの"「シートの保護」ダイアログウィンドウの表示"までは自動化できました。 

以降、「ウィンドウ内のテキストフィールドに入力する」以降の処理は、質問者さんがすでに指定しているやり方をそのまま行えば問題ないと思います。(「シートの保護」ダイアログウィンドウ自体のウィンドウ名は「シートの保護」固定であるため)

<サンプルの全体>
イメージ説明

投稿2023/11/25 08:14

編集2023/11/25 11:16
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umioyo

2023/11/25 12:23

こんなに事細かにありがとうございます! 会社のPCなのですぐに確認できませんが、週明けから実際に試してみようと思います。 PADの得意、不得意なところもよくわかりました。 ホントに助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問