Power Automate Desktopでフォルダ内データをがっちゃんこ！

皆さん、こんにちは。Miyuです！
私は某小売業で人事系の業務を行ってます。主な業務の中に勤務時間外を会社の勤怠システムから抽出し確認する業務があります。そのなかで部署ごとにデータを抽出することしかできないので毎回データ同士でがっちゃんこさせています。これを自動化できないかと思い、今回は初めてPower Automate Desktopを使って自動化を試みました。また同じ人事系の業務をしている方も勤怠ではないですが、全店報告分を全て1つのファイルにまとめることが多いと聞いたので今回作ってみようと踏み出してみました。
# :writing_hand:こんなことしたい
フォルダ内にあるExcelファイルを1つにまとめる。※チェックする項目が2つあるのでシートを複製したい。←ここまで自動化したい。
# :writing_hand:ひとまず形にはなった
個人情報が含まれているため青く塗りつぶし図形が入っていますが、ちゃんと1つのExcelファイルにまとめ、シートを複製することができました。

https://x.com/miyupck373712/status/1833157621773382080

# :writing_hand:使用したシステム
+ Power Automate Desktop
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836509/17739633-0643-139a-3676-429551826762.png)
「WebプラウザーやExcelなどのアプリケーションの操作やファイルの操作などを自動化することができる」
※参考Website
https://marukentokyo.jp/whatpad/

つまりパソコンのデスクトップ上でマウスやキーボードの動きを自動化したり、画面に表示されたアイコンを組み合わせて自動化したりするMicrosoft社のツールになります。

# :writing_hand:フローについて
## :gear:全体フロー
![スクリーンショット 2024-09-10 003940.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836509/5768deee-e6fe-c5c8-a769-124a561cf653.png)
![スクリーンショット 2024-09-10 004019 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836509/c8765f8d-3e43-ebe2-23f7-132fe17e2825.png)

<details><summary>フローのソースコード</summary>

```ruby:plaintext
Display.SelectFileDialog.SelectFiles
    Title: 'ファイル選択'
    FileFilter: '*.xlsx'
    IsTopMost: False
    CheckIfFileExists: False
    SelectedFiles => SelectedFiles
    ButtonPressed => ButtonPressed

Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess
    Path: 'C:\\Users\\194316\\Desktop\\スタッフ用\\合体.xlsx'
    Visible: True
    ReadOnly: False
    Instance => ExcelInstance

LOOP FOREACH CurrentItem IN SelectedFiles
    Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess
        Path: CurrentItem
        Visible: True
        ReadOnly: False
        Instance => ExcelInstance2

    Excel.ReadFromExcel.ReadAllCells
        Instance: ExcelInstance2
        ReadAsText: False
        FirstLineIsHeader: False
        RangeValue => ExcelData

    Excel.GetFirstFreeRowOnColumn
        Instance: ExcelInstance
        Column: 1
        FirstFreeRowOnColumn => FirstFreeRowOnColumn

    Excel.WriteToExcel.WriteCell
        Instance: ExcelInstance
        Value: ExcelData
        Column: 1
        Row: FirstFreeRowOnColumn

    Excel.CloseExcel.Close
        Instance: ExcelInstance2
END

Excel.SaveExcel.SaveAs
    Instance: ExcelInstance
    DocumentFormat: Excel.ExcelFormat.OpenXmlWorkbookMacroEnabled
    DocumentPath: '週の勤怠'

Excel.GetAllWorksheets
    Instance: ExcelInstance
    Worksheets => SheetNames

Excel.SetActiveWorksheet.ActivateWorksheetByName
    Instance: ExcelInstance
    Name: SheetNames[0]

Excel.GetFirstFreeColumnRow
    Instance: ExcelInstance
    FirstFreeColumn => FirstFreeColumn
    FirstFreeRow => FirstFreeRow

Excel.ReadFromExcel.ReadCells
    Instance: ExcelInstance
    StartColumn: 1
    StartRow: 1
    EndColumn: FirstFreeColumn - 1
    EndRow: FirstFreeRow - 1
    ReadAsText: False
    FirstLineIsHeader: False
    RangeValue => ExcelData2

Excel.AddWorksheet
    Instance: ExcelInstance
    Name: '時間外1'
    WorksheetPosition: Excel.WorksheetPosition.First

Excel.WriteToExcel.WriteCell
    Instance: ExcelInstance
    Value: ExcelData2
    Column: 1
    Row: 1

Excel.SetActiveWorksheet.ActivateWorksheetByIndex
    Instance: ExcelInstance
    Index: 2

Excel.RenameWorksheet.RenameWorksheetWithIndex
    Instance: ExcelInstance
    Index: 2
    NewName: '時間外2'

Excel.SaveExcel.Save
    Instance: ExcelInstance
```
</details>

## :gear:フローの詳細
ファイルのダイアログを表示して複数のファイルの選択を可能にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836509/5cb4df55-ba74-705f-33b9-e78c34accbbe.png)

:::note info
この時下にある「複数の選択」を許可しておく必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836509/f470e647-7c28-de47-517a-fc2427180a49.png)
:::

合体させる用のまっさらなExcelファイルを用意します。
![スクリーンショット 2024-09-10 010938.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836509/203aa8ba-7abf-7f1c-cbac-3a2d67ab4bd6.png)

:::note warn
ただし私の現在のフローだと項目のみ前もって入力しておく必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836509/8c213f54-3506-2e6e-2083-744f9b45f350.png)
:::

Excelのワークシートすべてのデータを読み取り、空（何も書いていない行）から書き込んでいきます。これをExcelファイルごとに繰り返すようループを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836509/5fdadb21-23b5-d214-fdc4-f73db079c27b.png)

私はデータが消えてしまうことが怖いのでひとまず保存をします。この時自分が好きなようにファイル名を変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836509/82e507c8-9700-b2de-54f7-c9867aa33204.png)

Excelのワークシートをアクティブにして、データを全て読み取り新しいワークシートに名前をつけて追加をしデータを書き込みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836509/c966999b-f048-ff04-015c-225d9e11aad9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836509/8660eac8-3ebb-67a9-1b8e-2466bc52aceb.png)

:::note warn
FirstFreeColumnとFirstFreeRowは「空の1行・1列目」＝「最終行の次の行・最終列の次の列」ということになるので、-1列・-1行する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836509/b4c6924f-3809-1b64-a4ca-e14702d1e0ae.png)
:::

ここは追加で最初1つにがっちゃんこしたシート名を変更して保存をしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836509/a7222ffd-1859-0f8c-97e4-6264374c7260.png)

# :writing_hand:同じ部署内のメンバーに報告
今回作ったファイル自動がっちゃんこシステムを私の直属上司と異なる業務分野で同じようにファイルを1つにまとめる作業がある先輩へルーティン業務が楽になるかもしれないと言って見せてみました。まず今までこのように何かを効率化したいと考えていたものの実際作るということをしてこなかった部署なので「すごいね～、上回る～自動で動いてる～」「何これ？！」といったびっくりして2人ともにこにこしていました。ただし、同じ業務をしている上司からは下記のようなフィードバックをもらいました。

:::note info
+ (資料でWEBサイトにも自動で入れる動画を見せたら）これそもそものデータを自動でとることはできないかな
+ 身近な複数のデータを1つのデータにする業務は他にたくさんあるので、そのどれにも活用できそうで:thumbsup:
+ (私自身ここからフィルターをかけて…といったデータ編集の作業も自動化のなかに入れたかったことを伝えると）それだと1つ1つに編集作業を自動で入れることが必要になるから他の業務で簡単に使えなくなる。自動化はここまでで十分。
:::

また異なる業務をしている先輩からも同じようなフィードバックをもらいましたが、最初に1つのファイルにするとき項目だけ入れておくなど前準備があるからこれをデータをフォルダ内にいれたらすぐに1つに結合できると便利とご意見をいただきました。

# :writing_hand:自動化って便利
Power Automate Desktop自体コードやアクションが難しかったというのが今回触ってみて感じたことです。しかし1回1回コピー＆ペーストするより断然作業時間が短縮されることを今回作ってみて、上司・先輩と一緒に見てみて実感しました。制作する際になかなか自分が欲しい情報、設定方法などがあまりなく自分で考えて前準備を手動で行い形にはしたものの結局フィードバックで「前準備がなくなったらいいのに」というお声もいただいたので、もっといろんな記事やホームページをみて活用できそうなものはどんどん取り入れていきたいと思いました。