デスクワークを超絶快適にするおすすめギアたち詳しく見る

キーワードリストに列挙したキーワードをファイル名に含むファイルを順番に開く

じょじお

この記事ではPower Automate for desktopを使って、キーワードリストに列挙したキーワードにマッチしたファイルをフォルダから抽出して取得する方法について学習します。

目次

この記事のゴール

  1. KeywordList.xlsxに開きたいファイル名を列挙して保存しておきます。
  2. Power Automate for desktopでKeywordListを読み込んで「Excelファイル格納フォルダ」からキーワードリストをファイル名に含むExcelファイルを探して開きます。

フロー完成図

フロー完成図

Power Automate for desktopフロー作成手順

Excelファイルを読み込む処理

じょじお

フローを作成していきます。まずはKeywordListのExcelファイルを読み込む処理を作ります。

STEP
Power Automate for desktopを起動して新規フローを作成します。
STEP
「Excelの起動」アクションを追加します。

▲パラメータを入力します。

  • Excelの起動:次のドキュメントを開く
  • ドキュメントパス:C:\Users\user\Desktop\KeywordList.xlsx
  • インスタンスを表示する:オン
  • 読み取り専用として開く:オン

ドキュメントパスとは?

生成する変数:%ExcelInstance%(インスタンス型変数)

STEP
「アクティブなExcelワークシートの設定」アクションを追加します。

▲パラメータを入力します。

  • Excelインスタンス:%ExcelInstance%
  • 次と共にワークシートをアクティブ化:インデックス
  • ワークシートインデックス:1

このアクションはExcel内に複数のワークシートがある場合に重要です。

STEP
「Excelワークシートから列における最初の空の行を取得」アクションを追加します。

▲パラメータを入力します。

  • Excelインスタンス:%ExcelInstance%
  • 列:A

KeywordListのA列目(1列目)に何個のデータが入っているかを取得するためのアクションです。このアクションで書き込まれている行数がわかります。

生成する変数: %FirstFreeRowOnColumn% (数値型変数)

STEP
「Excelワークシートから読み取り」アクションを追加します。

▲パラメータを入力します。

  • Excelインスタンス:%ExcelInstance%
  • 取得:セル範囲の値
  • 先頭列:1
  • 先頭行:1
  • 最終列:1
  • 最終行:%FirstFreeRowOnColumn – 1%

%FirstFreeRowOnColumn%は「最初の空の行」であって最終行ではありません。最終行として使用する場合は必ずマイナス1するのを忘れないようにしましょう。

生成する変数: %ExcelData% (データテーブル型変数)

STEP
「Excelを閉じる」アクションを追加します。

▲パラメータを入力します。

  • Excelインスタンス:%ExcelInstance%
  • Excelを閉じる前:ドキュメントを保存しない
STEP
「データテーブル列をリストに取得」アクションを追加します。

▲パラメータを入力します。

  • データテーブル:%ExcelData%
  • 列名またはインデックス:0

「Excelワークシートから読み取り」アクションで取得したExcelDataはDatatable型変数(2次元配列)になっています。このままでは扱いづらいのでA列のみを切り取ってリスト(1次元配列)にします。

生成する変数:%ColumnAsList%(リスト型変数)

フォルダー内のファイルをフィルターしてリストに取得する処理

じょじお

ここからはExcelから取得したキーワードの一覧をもとにファイルフィルターを開きます。

ぽこがみさま

ファイルフィルターを使って「フォルダー内のファイルを取得」アクションを使うことで特定のファイルだけをピックします。

STEP
「テキストの結合」アクションを追加します。

▲パラメータを入力します。

  • 結合するリストを指定:%ColumnAsList%
  • リスト項目を区切る区切り記号:カスタム
  • カスタム区切り記号:*;

生成する変数:JoinedText(文字列型変数)

このアクションを実行すると、

  • アクション実行前は、[ ‘りんご’ , ‘ばなな’ , ‘いちご’ ]が、
  • アクション実行後は、[ ‘りんご*;ばなな*;いちご’ ]になります。

3つ格納されていた文字列を1つの文字列につなぎます。つなぐ理由は「フォルダー内のファイルを取得」アクションのパラメータに渡すためです。リスト型変数をそのままパラメータに渡すことができないので1つの文字列にしています。あわせてキーワードに「*(ワイルドカード)」をつけて取得できるファイル名に含みを持たせています。

  • ワイルドカードを付けない場合どのファイルにもマッチしません。「いちご」に完全一致するファイルは存在し得ないからです。なぜなら「いちご」というExcelファイルは実際には「いちご.xlsx」だからマッチしません。
  • ワイルドカードを付ける場合、「いちご*」に部分一致する「いちご.xlsx」や「いちご-20220122.xlsx」、「いちごいちごいちご.xlsx」などがマッチします。

セミコロンを使っている理由は下記のファイルフィルターの仕様のとおり複数のファイルフィルターを使用するときはセミコロンを使います。

複数のファイルフィルターを使えるようにするには、選択した項目をセミコロンで区切ります。(例:*.txt ; *.exeなど)。

フォルダー内のファイルを取得アクションのファイルフィルターのヘルプ
STEP
「変数の設定」アクションを追加します。

▲パラメータを入力します。

  • 設定:%fileFilter%
  • 宛先:%JoinedText + ‘*’%

先ほど作成した文字列は[‘りんご*;ばなな*;いちご’]でした。ご覧いただくとわかるように「いちご」にだけ「*(ワイルドカード)」がついていません。これでは「いちご.xlsx」にはマッチしますが「いちご2022-01-01.xlsx」とか「いちごいちご.xlsx」にマッチしません。このアクションを使って念のためいちごにもアスタリスクをつけています。

STEP
「フォルダー内のファイルを取得」アクションを追加します。

▲パラメータを入力します。

  • フォルダー:C:\Users\user\Desktop\Excelファイル格納フォルダ
  • ファイルフィルター:%fileFilter%
  • サブフォルダーを含める:オフ

これまでのアクションで作成した%fileFilter%をファイルフィルターのパラメータとして渡します。これによってフォルダからキーワードでフィルタしてファイルを取得することができます。

生成する変数:Files

取得したファイルリストをもとにループし、ファイルリストのファイルを1つずつ開く処理

じょじお

ここまでのアクションでターゲットとするExcelファイルだけのファイル名が格納されたFiles変数を取得できているはずなので、Files変数をループを使って1個ずつ取り出します。

STEP
「For each」アクションを追加します。

▲パラメータを入力します。

  • 反復処理を行う値:%Files%

生成する変数:CurrentItem

STEP
(ループの中の処理)「Excelの起動」アクションを追加します。
STEP
(ループの中の処理)「Excelを閉じる」アクションを追加します。

▲パラメータを入力します。

フロー完成図

実行してみた

STEP
KeywordList.xlsxにキーワードを列挙します。
KeywordList.xlsx

▲KeywordListに図の3つのアイテムを入力しました。(「りんご、ばなな、いちご」)

STEP
Power Automate for desktopを実行します。

▲フローを実行すると「フォルダー内のファイルを取得」アクションが生成する「Files」変数には、ターゲットとするファイルのみが取得されます(上図)。このFiles変数をもとにFor eachを作っているので狙ったExcelファイルだけが1つずつ開きます。

Robinソースコード

Excel.LaunchExcel.LaunchAndOpen Path: $'''C:\\Users\\user\\Desktop\\KeywordList.xlsx''' Visible: True ReadOnly: True LoadAddInsAndMacros: False Instance=> ExcelInstance
Excel.SetActiveWorksheet.ActivateWorksheetByIndex Instance: ExcelInstance Index: 1
Excel.GetFirstFreeRowOnColumn Instance: ExcelInstance Column: $'''A''' FirstFreeRowOnColumn=> FirstFreeRowOnColumn
Excel.ReadFromExcel.ReadCells Instance: ExcelInstance StartColumn: 1 StartRow: 1 EndColumn: 1 EndRow: FirstFreeRowOnColumn - 1 ReadAsText: False FirstLineIsHeader: False RangeValue=> ExcelData
Excel.CloseExcel.Close Instance: ExcelInstance
Variables.RetrieveDataTableColumnIntoList DataTable: ExcelData ColumnNameOrIndex: 0 ColumnAsList=> ColumnAsList
Text.JoinText.JoinWithCustomDelimiter List: ColumnAsList CustomDelimiter: $'''*;''' Result=> JoinedText
SET fileFilter TO JoinedText + '*'
Folder.GetFiles Folder: $'''C:\\Users\\user\\Desktop\\Excelファイル格納フォルダ''' FileFilter: fileFilter IncludeSubfolders: False FailOnAccessDenied: True SortBy1: Folder.SortBy.NoSort SortDescending1: False SortBy2: Folder.SortBy.NoSort SortDescending2: False SortBy3: Folder.SortBy.NoSort SortDescending3: False Files=> Files
LOOP FOREACH CurrentItem IN Files
    Excel.LaunchExcel.LaunchAndOpen Path: CurrentItem Visible: True ReadOnly: True LoadAddInsAndMacros: False Instance=> ExcelMatched
    # ここにマッチしたExcelファイルに行うアクションを追加してください。
    Excel.CloseExcel.Close Instance: ExcelMatched
END

▲フローデザイナーにコードをコピペすると、ここで作成したフローを自分のPCで再現できます。

開いたExcelを使って転記する方法は?

以下の記事が参考になるかと思います。

テキストファイルをキーワードリストにする方法は?

今回キーワードリストとしてExcelを使いましたがテキストファイルをキーワードリストとして使用する場合は下記の記事が参考になるかと思います。

まとめ

じょじお

この記事ではキーワードリストに列挙したキーワードにマッチしたファイルをフォルダから抽出して取得する方法について学習しました。

ぽこがみさま

このブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!

Power Automate学習教材

Power AutomateをKindleで学びたい方はコチラ

▲Kindleと紙媒体両方提供されています。デスクトップフロー、クラウドフロー両方の解説がある書籍です。解説の割合としてはデスクトップフロー7割・クラウドフロー3割程度の比率となっています。両者の概要をざっくり理解するのにオススメです。

Power Automate for Desktopの基本をしっかり学習するのにオススメです。RPA界隈では有名なRPAエンジニア集団である『ロボ研』さんが監修されている解説書です。テスト用の業務Webシステム/デスクトップ業務アプリを使いながら実践形式で学習できる点が一番のメリットかなぁと思います。

Power Automate クラウドフローの入門書です。日本語の解説書は数少ないのでレアかと思います。変数の解説から代表的なアクションの解説がされているので初心者におすすめの本です。

Microsoft 365/ Power Automate / Power Platform / Google Apps Script…

Power Automateを動画で学びたい方はコチラ

▲Udemyで数少ないPower Automateクラウドフローを主題にした講座です。セール時は90%OFF(1200円~2000円弱)の価格になります頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。

この記事が気に入ったら
フォローしてね!

シェアしてくれたらウレシイ(·:゚д゚:·)
  • URLをコピーしました!
  • URLをコピーしました!
目次
閉じる