見出し画像

無料RPAで複数のExcelファイルをひとつのExcel表に集約してみよう【2/4】

Windows 11に標準搭載のPower Automate for desktopを使えば、Windowsのほぼあらゆる操作を自動化できます。このシリーズでは、蓄積したExcelファイルを表として集約し、データ活用するための方法を紹介します。


「脱Excel」とはいうけれど、日本の組織にはたくさんのExcelファイルがあります。業務システムのベンダーはExcelのままでは売上げが立たないので「脱Excel」を勧めてきますが、そういっても、です。

Excelファイルには多くのメリットがあり、だからこそ世界中で40年近く使われ続けているわけですが、異なるファイル間のデータ連携が苦手(不可能ではない)なのがExcelの最大のデメリットです。そこで今回は、たくさんのExcelファイルにある必要な情報を、ひとつのExcelファイルに転記して集約する手順を順に説明します。

データ集約の前提

説明を始める前に、動作環境について、いくつかの条件をお話しします。

  • OS:Windows 11(Windows 10の場合は、マイクロソフトのサイトからPower Automate for desktopをダウンロードしてください)

  • Excel:次回以降の説明のため、Microsoft 365付属のExcel、またはExcel 2019以降

  • 集約元の1つ以上のファイルのコピーを作業用フォルダに保存してある(万が一操作を誤ってファイルを壊してもいいように、オリジナルとは別のファイルをご用意ください)

この記事では、ある市の消防本部を想定して、デスクトップ上に「消防立入検査」フォルダがあり、サブフォルダの「集約対象ファイル」フォルダと、集約先の「立会検査結果集約表」ファイルがあるものとします。また、「集約対象ファイル」フォルダには、集約対象のExcelファイルが保存されています。

「消防立入検査」フォルダ
「集約対象ファイル」フォルダ

Excelファイルの転記の流れ

さっそくPower Automate for desktopを起動しましょう。スタートボタン横の検索ボックスに「power」と入力すると、スタートメニュー内に「power」を含むアプリが絞り込み表示されます。ここで「Power Automate」を見つけてクリックすると、Power Automate for desktopが立ち上がります。

Power Automate for desktopが立ち上がったら、ウィンドウ左上の「+新しいフロー」をクリックしてください。「フロー(flow:流れ)」とは、Power Automateで自動操作させる一連の「流れ」のことです。

フロー名には操作対象になるExcelファイルの様式名を入れるとよいです。原則として、フローにはある特定の様式(書式)のExcelファイル専用の処理手順を設定します。フロー名を様式名にすれば、どの様式用に作ったフローなのか、あとで確認しやすくなります。ここでは「消防立入検査通知書の集約フロー」と入力したものとして説明を続けます。

フローを作成する

Power Automateでフローを作るときのコツは「人間の操作を再現すること」です。何もないところからフローを作り出すのは大変ですから、自分が普段している操作の手順、自分ならこういう手順で操作するはず、という流れをフローとして組み立ててください。

複数のExcelファイルを読み込んでひとつのExcelの表にする操作を箇条書きにすると、以下になるはずです。

  1. 集約先のExcelファイルを開く

  2. 元のExcelファイルのあるフォルダを開く

  3. 元のExcelファイルを開く(すべてのExcelファイルを読み終えたら6に進む)

  4. 元のExcelシートのセルをコピーし、集約先のExcelシートに貼り付ける

  5. 4を繰り返し、作業が終わったら3に戻る

  6. 集約先のExcelファイルを保存して閉じる

このフローをPower Automateで表現すると、次の画面のようになるはずです。

実際に作成したフロー

Power Automateによるファイルとフォルダの操作

今回は、Excelファイルを開いて閉じる、基本の処理について説明します。新しいフローを作り始めたときの画面は、以下のようになっているはずです。

新規画面

初めてだともうこの段階で途方に暮れる思いかもしれないです。でも大丈夫。Power Automateの操作は、わかってしまえば単調そのものです。

このフローの最初の手順は、「集約先のExcelファイルを開く」ことでした。ここで、Power Automateの作業のためには、あらかじ集約先のExcelファイルを用意しておく必要があることに気付きます。

集約先のExcelファイルを用意するには、元のExcelファイルから、どのセルを転記するか方針を決める必要があります。まず、元のExcelファイルを開きます。

元のExcelファイル

Power Automateでデータを集約するときのコツは「面倒がらずにすべてのデータを持ってくる」ことです。たとえば文書名の「立入検査結果通知書」は対象外にしてしまいがちですが、様式にかかわらず、すべての書類をひとつの大きな表に集約したいときは、文書名があるとあとから便利です。

転記対象のデータを決めたら、集約先のExcelファイルで表を作ります。

集約先のExcelファイル

画面が小さくてわかりにくいですが、以下の列を用意しています。

  • 文書番号

  • 発行日

  • 宛先

  • 所在地

  • 宛先法人名

  • 宛先氏名

  • 発行官庁

  • 発行者

  • 文書名

  • 立入先

  • 所在地

  • 立入先名称

  • 立入先用途

  • 立入検査日

  • 報告書

  • 提出期限

  • 区分1

  • 指摘事項1

  • 区分2

  • 指摘事項2

  • 区分3

  • 指摘事項3

  • 区分4

  • 指摘事項4

  • 立会者氏名

地味な作業なのでだんだん諦める気持ちが高まってきますが、最初の1回設定すれば済むことなので「今日のお昼休みまでに完成させる!」など気持ちを高めて取りかかるといいですね。

ここまで用意したら、やっとフローの作成に戻れます。最初の手順は、「集約先のExcelファイルを開く」ことだと覚えていますか?

Excelファイルを開くには、ファイルの場所を決め打ちでフローに設定する方法もありますが、それだとファイルの場所が変わるとフローを編集することになって不便です。そこで、左側の「アクション」から「メッセージボックス」グループにある「ファイルの選択ダイアログを表示」アクションをマウスで選んで、中央にある「フロー」ペインにドラッグ・アンド・ドロップしてください。

以下は操作動画です。

この操作で「ファイルの選択ダイアログを表示」画面が表示されますので、以下のように入力します。

「ファイルの選択ダイアログを表示」アクション

「ダイアログのタイトル」には、このダイアログで何をすればいいのか、自分以外の人が引き継いだときにわかるような説明になっているとよいです。ここでは「集約ファイルの選択」と入力しました。

「ファイルフィルター」には、集約先フォルダにExcelファイル以外が混じっていたとき、間違って選択されないよう、ファイル名そのもの、あるいは少なくともファイル拡張子(ファイル名の最後にある「.」に続く3〜4文字のことで、テキストファイルなら「.txt」になる)を指定して、Excelファイル以外が選ばれないようにします。ここでは、Excelファイルの拡張子である「.xlsx」を持つファイルだけが選べるように「*.xlsx」と入力しました。「*」は「ワイルドカード」のことで、「どの文字がいくつあってもいいです」の意味です。「*.xlsx」全体では、「何という名前でも構わないが、Excel形式のファイルだけが選べる」の意味になります。

「ファイルが存在するかどうかを確認」のスイッチをONにして、誤って存在しないファイル名を入力しないようにチェックします。

「生成された変数」は自動的に割り当てられますが、あとでわかりやすいように変数名を「SelectedFile」に変更しました。ここまでできたら「保存」を押して、「ファイルの選択ダイアログを表示」の設定を完了します。

次の処理は、「ファイルが存在する場合」という条件を付けることです。直前にファイルが存在するかどうかを確認してファイルを選びましたが、次の瞬間にファイルが削除されるとフローが誤動作してしまいます。慎重に設計したいのと「ファイルが存在することが前提のブロックだ」ということを明確にするために、条件を付ける方がいいでしょう。今度は、左側の「アクション」から「ファイル」グループにある「ファイルが存在する場合」アクションをマウスで選んでドラッグ・アンド・ドロップしてください。

ファイルが存在する場合」アクション

「ファイルが存在する場合」画面が登場しますので、「ファイルパス」にさきほど作った変数「%SelectedFile%」を割り当てます。Power Automateでは、変数名を「%」で囲むことで変数を表します。いま、SelectedFileには、集約先のExcelファイルのパス名(「”C:\Users\user\OneDrive\Desktop\消防立入検査\立会検査結果集約表.xlsx”」など)が入っているはずです。このようにアクションを設定することで、「この変数で示されるファイルがある場合」という条件が作れます。

ここまでで、集約先のExcelファイルが存在することが確認できますから、フローの最初の手順「集約先のExcelファイルを開く」を完成させます。「アクション」から「Excel」グループにある「Excelの起動」アクションをドラッグ・アンド・ドロップしてください。

「Excelの起動」アクション

「Excelの起動」画面が登場しますので、「ドキュメントパス」に「%SelectedFile%」を指定します。「生成された変数」は自動的に割り当てられますが、あとでわかりやすいように変数名を「TargetBook」に変更し、「保存」を押します。

SelectedFileとTargetBookの違いは何でしょうか? SelectedFile変数にはファイルの場所とファイル名がテキストで保存されています。一方、TargetBook変数はオブジェクトで、指定したファイルを開いた状態のExcelというアプリケーションの実体を表しています。ファイルなのか、アプリケーションなのかで扱う変数をわける必要があるのです。

フローの次の手順は「元のExcelファイルのあるフォルダを開く」ことです。「メッセージボックス」グループから今度は「フォルダーの選択ダイアログを表示」アクションをドラッグ・アンド・ドロップしてください。

「フォルダーの選択ダイアログを表示」の画面

「フォルダーの選択ダイアログを表示」の画面には「ダイアログの説明」に「集約対象ファイルの選択」を入力しました。業務用のシステム設計では、「山田さんはコンピューターが苦手だから、これじゃあわからないかな」など、実際に操作する人や引き継ぐ人を想像しながら言葉を選ぶのが大事です。

選択されたフォルダーを表す変数には「SelectedFolder」という名前を付けて保存します。

ここまでで、どのフォルダーを開きたいかが決まったので、フォルダー内のファイルを取得する手順を設定します。ファイルと同様、フォルダーが存在するか確認してから処理を進めるために「フォルダー」グループの「フォルダーが存在する場合」アクションを設定します。

「フォルダーが存在する場合」アクション

「フォルダーパス」には集約元のExcelファイルがあるフォルダーを表す変数「%SelectedFolder%」を指定します。

ここまでで、集約元のExcelファイルがあるフォルダーを特定するまでたどり着きました。次はフォルダー内のファイル一覧を取得する手順です。「フォルダー」グループから「フォルダー内のファイルを取得」アクションを選んで設定しましょう。

「フォルダー内のファイルを取得」アクション

フォルダーには集約元のExcelファイルがあるフォルダーを表す「%SelectedFolder%」を指定します。ファイルフィルターには、Excelファイルだけを収集するように「*.xlsx」を指定します。ここではサブフォルダーまでは探しに行きませんが、もしフォルダーが階層構造になっているときは「サブフォルダーを含める」スイッチをONにしてください。

このアクションにより、指定したフォルダーのファイル一覧を取得できます。ファイル一覧を格納する変数として「SourceFiles」を割り当てたら保存します。

変数名が「SourceFiles」という複数形になっているのは、この変数は処理対象ファイルのリストを保持しているからです。Power Automateで変数の名前を付けるときは、文字が入っているのか、アプリケーションなのか、リストなのか、変数名で見分けがつくように自分でルールを付けるとよいでしょう。

ちなみに、ChatGPTで「マイクロソフトのPower Automateで変数名を付けるときのベストプラクティスはありますか?」と尋ねたところ、以下の回答がありました。

Power Automateで変数名を付ける際のベストプラクティスは以下のとおりです:

1. 意味のある名前を付ける

  • 変数が何を表しているのかが一目で分かるような名前を付けます。たとえば、「UserEmail」や「OrderAmount」など、変数の目的を明確にする名前を使用します。

2. 名前の一貫性を保つ

  • 大文字と小文字の使い方、単語の区切り方法などを統一します。たとえば、キャメルケース(userEmail)やスネークケース(user_email)を選んで一貫して使用します。

3. プレフィックスを使用して種類を示す

  • 変数の種類を明確にするためにプレフィックスを付けるとわかりやすくなります。

    • str(文字列): strUserName

    • num(数値): numOrderTotal

    • arr(配列): arrItems

    • bool(真偽値): boolIsActive

4. 英語を使用する

  • 多言語対応のシナリオを考慮し、英語の変数名を使うと国際的なチームや将来のメンテナンスがしやすくなります。

5. 長すぎず、短すぎない名前を選ぶ

  • 名前が長すぎると読みづらくなりますが、短すぎると意味がわかりにくくなります。適度な長さで、わかりやすい名前を選びます。

6. スコープを意識する

  • 同じフロー内で似たような変数名を使わないようにし、スコープを明確に保つことが大事です。

妥当なアドバイスだと思います。参考にしてください。

さて、このまま個々のファイルを読み込んで表に転記する説明をしたいところですが、ひとつの記事としては長すぎます。フローの最後の手順「集約先のExcelファイルを保存して閉じる」を設定して今回の記事を終えます。

「Excelを閉じる」アクション

上記のように、「Excel」グループから「Excelを閉じる」を選んで「Excelインスタンス」に「%TargetBook%」を指定します。Excelファイルを表す変数は、ファイルの場所を示す「SelectedFile」とファイルを開いた状態のExcelアプリケーションを示す「TargetBook」のふたつがありました。ここでは「Excelを閉じる」というアプリケーションの操作手順を設定していますので、「Excelインスタンス」には「%TargetBook%」を指定しているのです。また、TargetBook変数はアプリケーションとしてのExcelですから、「Excelを閉じる前」に「ドキュメントを保存」というアプリケーションの操作ができます。

ここまでの設定で、以下の画面の赤枠以外は完了です。

画面の赤枠以外は完了

処理内容でいうと、以下のリストの打ち消し線部分が終わりました。

  1. 集約先のExcelファイルを開く

  2. 元のExcelファイルのあるフォルダを開く

  3. 元のExcelファイルを開く(すべてのExcelファイルを読み終えたら6に進む)

  4. 元のExcelシートのセルをコピーし、集約先のExcelシートに貼り付ける

  5. 4を繰り返し、作業が終わったら3に戻る

  6. 集約先のExcelファイルを保存して閉じる

次回は、上のリストの3〜5の設定方法を紹介します。画面をよくみると52アクションとあって面倒そうに思えますが、単調な作業の繰り返しですので大丈夫です。次回までに、このフローの骨格部分をご自身のファイルについて設定できるか、挑戦してみてください。

本記事は、[株式会社ビジー・ビー]の許諾を得て転載しています。
ビジー・ビーでは生成AIを活用したコメントデータ分析や、Excel業務の効率化を支援するツールやソリューションを提供しています。
ご質問、ご相談は、以下のフォームからお問い合わせください。

マガジン:無料のRPA(PowerAutomate)の使い方

Windows 11標準搭載の「Power Automate for desktop」活用術や、Excel業務効率化の最新テクニックを具体的な事例で紹介します。また、生成AIを活用したデータ分析や予測、業務効率化に関する記事も充実。月4回程度の更新で、初心者からプロフェッショナルまで幅広い層に役立つ内容をお届けします。このマガジンで、新しいデジタルツールの活用法を学び、データ分析や業務効率化に挑戦してみませんか?

いいなと思ったら応援しよう!