【自習用コード配布】毎月の売上ファイルを一瞬で結合する方法(CSV・Excel対応)Power Automate for desktop
この記事について
対象:フォルダ内の特定ファイルを抽出して移動したい方
前提:Power Automate for desktop(無料版)
所要時間:約3分(コードCopyして手を動かすと5分ほど)
※フローが長いのでコードとサンプルファイルを無料配布しています

ちょっと小話…
午後休で残り勤務時間はあと30分。
そんなタイミングで、会社の上司から電話がかかってきました。

毎月の売上ファイルを一瞬で結合する方法(CSV・Excel対応)
では、電話での連絡内容を振り返りましょう。フォルダ内にある1ヶ月分の売上データ(Excel・CSV混在)を、1つのファイルにまとめます。
フォルダ内にある1ヶ月分の売上データ(Excel・CSV混在)を、1つのファイルにまとめます。
やることは、「全部読み込んで、形をそろえて、下に足す」だけです。
ざっくりとした全体像は下記の通りです。

サンプルファイルはこちら!
今回は売上データ(テスト用)をダウンロードできます🫶
Zipを解凍して、好きな場所に設置して一緒に進めましょう。

デスクトップフローのサンプルコードも用意しました。
時間がない方は、こちらをそのまま使ってみてください。
下記をコピーし、新しく作成したフローに貼り付けてすぐに実行できます。
Display.SelectFolder Description: $'''1つにまとめたいファイルのあるフォルダを指定してください。結合したファイルはデスクトップに出力ファイルとして出力します''' IsTopMost: True SelectedFolder=> SelectedFolder
Folder.GetSpecialFolder SpecialFolder: Folder.SpecialFolder.DesktopDirectory SpecialFolderPath=> SpecialFolderPath
Folder.GetFiles Folder: SelectedFolder FileFilter: $'''*.xlsx;*.csv''' IncludeSubfolders: False FailOnAccessDenied: True SortBy1: Folder.SortBy.Name SortDescending1: False SortBy2: Folder.SortBy.NoSort SortDescending2: False SortBy3: Folder.SortBy.NoSort SortDescending3: False Files=> Files
LOOP FOREACH CurrentItem IN Files
IF EndsWith(CurrentItem, $'''.csv''', False) THEN
File.ReadFromCSVFile.ReadCSV CSVFile: CurrentItem Encoding: File.CSVEncoding.SystemDefault TrimFields: True FirstLineContainsColumnNames: True ColumnsSeparator: File.CSVColumnsSeparator.SystemDefault CSVTable=> Outputs
ELSE
Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: CurrentItem Visible: True ReadOnly: True UseMachineLocale: False Instance=> 読み取りExcel
Excel.ReadFromExcel.ReadAllCells Instance: 読み取りExcel GetCellContentsMode: Excel.GetCellContentsMode.TypedValues FirstLineIsHeader: True RangeValue=> Outputs
Excel.CloseExcel.Close Instance: 読み取りExcel
END
File.WriteToCSVFile.WriteCSV VariableToWrite: Outputs CSVFile: $'''%SpecialFolderPath%/出力データ.csv''' CsvFileEncoding: File.CSVEncoding.SystemDefault IncludeColumnNames: True IfFileExists: File.IfFileExists.Append ColumnsSeparator: File.CSVColumnsSeparator.SystemDefault
END
Power Automate for desktopの基本操作は下記の通りです。

さっそく動作を順に追加していきましょう。まずは繰り返しの処理の前までの設定です。

1. 「フォルダーの選択ダイアログを表示」を追加

💡このアクションを追加すると、どの場所にフォルダを置いても、各PCで対象フォルダを選択できます。
ダイアログの説明:「1つにまとめたいファイルのあるフォルダを指定してください。結合したファイルはデスクトップに出力ファイルとして出力します」と入力
フォルダー選択ダイアログを常に手前に表示する:ON(クリックすると青色になる)
上記設定が終わったら、保存ボタンをクリック
選択されたフォルダの場所(Path)は、変数 %SelectedFolder% に格納されます。
2.「特別なフォルダーを取得」を追加

💡このアクションを追加すると、どのPCでもデスクトップやドキュメントなどのフォルダの場所(Path)を取得できます。
特別なフォルダーの名前:「デスクトップ」を選択
上記設定が終わったら、保存ボタンをクリックしてください。
取得したデスクトップのフォルダの場所は、変数 %SpecialFolderPath% に格納されます。
3. 「フォルダー内のファイルを取得」を追加

💡1で選択したフォルダの中から、結合の対象となるExcelファイル(*.xlsx)とCSVファイル(*.csv)のみを抽出します。
フォルダー: %SelectedFolder%を青い[X]ボタンより追加
ファイル フィルター: .xlsx;.csv
サブフォルダーを含める:トグルをOFFのまま
並び替え基準:「名前(昇順)」で設定
上記設定が終わったら、保存ボタンをクリック
※条件に一致した複数のファイルが、リスト形式の変数 %Files% に格納されます。
※「;」を入れることで、複数のファイル検索が可能となります。
次は、繰り返しながらデータを処理していく部分になります。

4. 「For each」(繰り返しの処理)を追加

💡このアクションは、前にも出てきましたね。
そう、たくさんあるデータを、1つずつ順番に処理するためのアクションです。
反復処理を行う値: 青い[X]ボタンより3で取得した複数のファイル(%Files%)を選択し、追加
設定が終わったら、保存ボタンをクリックしてください。
ここから1つずつファイルを取り出し、すべてのファイルの処理が終わるまで以下の手順(5〜6)を繰り返します。
5. 「If/Else」もし~だったらこうする、そうじゃなかったらこうする処理を追加
💡If / Elseのアクションは、『もしこうだったらこうする、そうでなければこうする』といった条件分岐の動作を行うものです。

『If』アクションを追加した後、『Else』をIfの中に追加しましょう。下記のような形になります。

💡ファイルがCSVの場合はCSVとして読み取り、それ以外はExcelとして読み取ります。そのため、Ifの条件は『CSVのとき』と設定します。
最初のオペラント:%CurrentItem%を青い[X]ボタンから選択
演算子:末尾
2番目のオペランド:.csv
設定が終わったら、保存ボタンをクリックしてください。
Elseアクションは別に用意されています。「Else」と検索するか、『条件』から選択し、Ifの中にドラッグ&ドロップで配置しましょう。

上記のように設定すると、条件に当てはまる場合と当てはまらない場合で、処理を分けられるようになります。
Yesの時-「CSVファイルから読み取る」を追加
次に、If~Elseの間に、CSV ファイルから読み取るアクションを追加します。


💡CSVファイルを読み込み、中のデータを一覧として取り込みます(1行目は列名として扱われます)。
ファイルパス:%CurrentItem%を青い[X]ボタンから選択
エンコード:システムの既定値
最初の行に列名が含まれています: ON
生成された変数:青い変数欄をクリックすると変数名を変更できますので、Outputsと変更(後の処理で使いやすくするためです)
設定が終わったら、保存ボタンをクリック
次にElse~Endの間にExcelを読み取るアクションを追加します。

Noの時-「Excel の起動」を追加

💡重要💡ExcelなどのOffice操作を行う場合は、最初に『起動』、最後に『閉じる』のアクションが必要です。
Excel の起動: 次のドキュメントを開く
ドキュメント パス:%Currentltem%
インスタンスを表示する: トグルをOFF
読み取り専用として開く:トグルをON
生成された変数を読み取りExcelと変更します。
設定が終わったら、保存ボタンをクリックしてください。
※実際にExcelの動作を確認したい場合は、『インスタンスを表示する』をONにしてください。
「Excel ワークシートから読み取る」を追加

💡開いたExcelのすべてのセルを読み込み、変数 %Outputs% に格納します(1行目はヘッダーとして処理されます)
インスタンス: %読み取りExcel%
取得: ワークシートに含まれる使用可能なすべての値
セルの内容を取得する形式: 入力された値
範囲の最初の行に列名が含まれています:トグルをON
生成された変数:青い変数欄をクリックすると変数名を変更できますので、Outputsと変更(後の処理で使いやすくするためです)
設定が終わったら、保存ボタンをクリック
※今回はExcelのシートが1つだけのため設定していません。
複数のシートがある場合に、特定のシートだけを集計したいときは、『アクティブなExcelワークシートの設定』を追加してください。
「Excelを閉じる」を追加

💡読み取りが終わったExcelファイルは、必ず閉じましょう。次のファイルを順番に読み込んでいく必要があります。
インスタンス: %読み取りExcel%
Excelを閉じる前:ドキュメントを保存しない
設定が終わったら、保存ボタンをクリック
6.「CSV ファイルに書き込む」を追加


💡最後に、読み込んだ%Outputs%のデータを1つのCSVファイルにまとめて保存します。
ExcelではなくCSVにしているのは、電話番号などが入っている場合の先頭の0が消えてしまうのを防ぐためです。
書き込む変数: %Outputs%
ファイルパス: %SpecialFolderPath%/出カデータ.csv
エンコード: システムの既定値
詳細をクリック
列名を含めます:ONにする(画像の状態)
ファイルが存在する場合: 内容を追加する
区切り記号: システムの既定値
設定が終わったら、保存ボタンをクリック
CSVの場合は、設定するだけで、新しく追加した内容が一番下の行にそのまま追加されます。
実際に実行してみる
これで全ての設定が完了しました。「ドラフトを保存」し、「公開」して「実行」してみましょう。該当のフォルダを選択できますので、実際に読み込んでみましょう。

出力したCSVのデータをExcelとして利用したい場合は、「データ」→「テキストまたはCSVから」で読みこんだり、表示形式を設定したExcelに貼りつけたりすると、きれいに使えます。

最後に

今日作ったものは、たとえば最後に終了のメッセージを出したり、Excelに出力したりと、少し工夫するだけでもっと便利にできます。
少しずつ改良して、使いやすくしてみてください。
今日は勉強していただき、ありがとうございました。おつかれさまでした。

いいなと思ったら応援しよう!
よろしければ応援をお願いします。いただいたチップは、活動費として活用し、一部は寄付に回しています。