ボタンひとつでお仕事革命！Power Automateで仕事をサボ…じゃなくて効率化！

この記事では、Power Automate Desktop（PAD）を使って、データの取得から送信までの自動化フローを構築する手順を解説します。最初は、同僚たちにシンプルなフローを試してもらい、そのフィードバックを元に改良を重ね、最終的にExcelの処理も加えました。


## 完成版のPADの動作動画
https://x.com/331824miyamoto/status/1833173519058051545
## PADでやろうとしたこと（概略図）

![PAD フローチャート.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839271/019319d7-63eb-f256-ce0c-c590801375ae.jpeg)
## フローのソースコード

<details>
<summary>🐶クリックしてフローコードを表示🐶</summary>

```robin
WebAutomation.LaunchEdge.LaunchEdge Url: `` WindowState: WebAutomation.BrowserWindowState.Maximized ClearCache: False ClearCookies: False WaitForPageToLoadTimeout: 60 Timeout: 60 BrowserInstance=> Browser
UIAutomation.Click.Click Element: appmask['Window \'ログイン - 職場 - Microsoft​ Edge\'']['Edit \'cssLoginTableTextBox\''] ClickType: UIAutomation.ClickType.LeftClick MousePositionRelativeToElement: UIAutomation.RectangleEdgePoint.MiddleCenter OffsetX: 0 OffsetY: 0
MouseAndKeyboard.SendKeys.FocusAndSendKeys TextToSend: `` DelayBetweenKeystrokes: 3 SendTextAsHardwareKeys: False
UIAutomation.Click.Click Element: appmask['Window \'ログイン - 職場 - \'']['Edit \'cssLoginTableTextBox\' 2'] ClickType: UIAutomation.ClickType.LeftClick MousePositionRelativeToElement: UIAutomation.RectangleEdgePoint.MiddleCenter OffsetX: 0 OffsetY: 0
MouseAndKeyboard.SendKeys.FocusAndSendKeys TextToSend: `` DelayBetweenKeystrokes: 3 SendTextAsHardwareKeys: False
UIAutomation.Click.Click Element: appmask['Window \'ログイン - 職場 - Microsoft​ Edge\'']['Button \'ログイン\''] ClickType: UIAutomation.ClickType.LeftClick MousePositionRelativeToElement: UIAutomation.RectangleEdgePoint.MiddleCenter OffsetX: 0 OffsetY: 0
UIAutomation.Click.Click Element: appmask['Window \' システム - 職場 - Microsoft​ Edge\'']['Button \'送信\''] ClickType: UIAutomation.ClickType.LeftClick MousePositionRelativeToElement: UIAutomation.RectangleEdgePoint.MiddleCenter OffsetX: 0 OffsetY: 0
UIAutomation.Click.Click Element: appmask['Window \' システム - 職場 - Microsoft​ Edge\'']['Hyperlink \'_日次/月次\''] ClickType: UIAutomation.ClickType.LeftClick MousePositionRelativeToElement: UIAutomation.RectangleEdgePoint.MiddleCenter OffsetX: 0 OffsetY: 0
UIAutomation.Click.Click Element: appmask['Window \' システム - 職場 - Microsoft​ Edge\'']['Button \'検索\''] ClickType: UIAutomation.ClickType.LeftClick MousePositionRelativeToElement: UIAutomation.RectangleEdgePoint.MiddleCenter OffsetX: 0 OffsetY: 0
WAIT 5
UIAutomation.Click.Click Element: appmask['Window \'システム - 職場 - Microsoft​ Edge\'']['Button \'CSV出力\''] ClickType: UIAutomation.ClickType.LeftClick MousePositionRelativeToElement: UIAutomation.RectangleEdgePoint.MiddleCenter OffsetX: 0 OffsetY: 0
WAIT 5
Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: $'''C:\\Users\\331824\\Downloads\\I_TenpoJisseki.csv''' Visible: True ReadOnly: False Instance=> ExcelInstance
Excel.SelectCellsFromExcel.SelectCells Instance: ExcelInstance StartColumn: $'''A''' StartRow: 1 EndColumn: $'''Z''' EndRow: 300
Excel.CopyCellsFromExcel.Copy Instance: ExcelInstance
Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: $'''C:\\Users\\\\Desktop\\店舗配信用\\店舗配信用.xlsm''' Visible: True ReadOnly: False Instance=> ExcelInstance2
Excel.PasteCellsToExcel.PasteAt Instance: ExcelInstance2 Column: $'''A''' Row: 1
Excel.ResizeColumnsOrRows.AutofitAllColumns Instance: ExcelInstance2
Excel.ResizeColumnsOrRows.AutofitAllRows Instance: ExcelInstance2
Excel.RunMacro Instance: ExcelInstance2 Macro: $'''色の変更と行削除_枠追加_ウィンドウ固定_列も固定'''
Excel.SaveExcel.SaveAs Instance: ExcelInstance2 DocumentFormat: Excel.ExcelFormat.FromExtension DocumentPath: $'''C:\\Users\\331824\\Desktop\\店舗配信用\\東.xlsm'''
Excel.CloseExcel.Close Instance: ExcelInstance2
Outlook.Launch Instance=> OutlookInstance
Outlook.SendEmailThroughOutlook.SendEmail Instance: OutlookInstance Account: `` SendTo: `` Subject: $'''''' Body: $'''


''' IsBodyHtml: False IsDraft: False Attachments: $'''C:\\Users\\331824\\Desktop\\店舗配信用\\東.xlsm'''
Excel.CloseExcel.Close Instance: ExcelInstance
File.Move Files: $'''C:\\Users\\331824\\Downloads\\I_TenpoJisseki.csv''' Destination: $'''C:\\Users\\331824\\Desktop\\店舗配信用''' IfFileExists: File.IfExists.DoNothing MovedFiles=> MovedFiles
UIAutomation.Click.Click Element: appmask['Window \'システム - 職場 - Microsoft​ Edge\'']['Button \'ログアウト\''] ClickType: UIAutomation.ClickType.LeftClick MousePositionRelativeToElement: UIAutomation.RectangleEdgePoint.MiddleCenter OffsetX: 0 OffsetY: 0
```
</details> 

## なぜPADを導入したのか

![現行業務の課題や問題点.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839271/5fd5bdf7-5b1c-aa01-e702-2a243ac3e0de.jpeg)

職場では「データ処理の時間短縮」が課題でした。そこで、Power Automate Desktop（PAD）を導入。社内PCに初期インストールされ、日本語対応も充実しているので手軽に使えます。

初めに複雑なフローを提示しましたが、同僚たちの興味は薄かったため、自動ログインやデータ保存などのシンプルなフローから試してもらい、徐々に改良を重ねました。
## 使用したツール

- **Power Automate Desktop (PAD)**: 自動化フローを作成
- **Excel**: データ処理・編集のために使用
- **Visual Basic for Applications (VBA)** : Excelでマクロを使用して処理を自動化

## 基本フローの手順

最初は次の手順で基本フローを作成しました（この時点ではExcelでのデータ処理は含んでいません）。

1. **自動ログイン**: UI要素をクリックし、IDとパスワードを入力。
2. **データ保存**: 指定したファイルのダウンロードと保存。
3. **メール送信**: 保存されたファイルを自動でメール送信。

### まずは自動でログイン！
![最初１.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839271/a888624d-0ab5-e4fb-5d83-39429ef6959f.jpeg)
![最初２.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839271/09138675-3780-c68e-8d71-973de16e4dff.jpeg)

UI要素をクリックで、任意のUIをクリックできるようになります。

### 自動でデータを取得！
![コメント 2024-09-10 103620.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839271/69c02140-111c-0b01-5c97-b411f8d7f6be.png)

UI要素をクリックで指定したファイルのダウンロードを開始します。

### ダウンロードしたファイルを選択してみよう！
![スクリーンショット 2024-09-09 154716.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839271/fd310cbe-fcb9-d7f0-e716-a8ca302dfc38.png)



### ダウンロードしたファイルをメールで送ろう！
![スクリーンショット 2024-09-09 160029.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839271/2b4dfe15-52f3-230f-be8e-7455108a8af0.png)
![スクリーンショット 2024-09-09 160433.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839271/10339774-efd6-caf1-6d89-916691e1fbd8.png)

ここまでフローを設定すると、自動でメールまで送ってくれるようになります。

最後に、ファイルがダウンロードフォルダに保存されたままなので、移動させます。![スクリーンショット 2024-09-09 161421.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839271/b258cc9d-3489-21f6-f3c3-f863003e2bb3.png)
これで、データ取得からメール送信までが自動化されました。

## 職場で使ってみよう！
作成したPADフローを職場の仲間に試してもらいました。事前に以下のような説明を行いました。

::: note warn

### 説明内容
- **課題**: データ処理に時間がかかり、業務の効率化が求められている
- **目的**: Power Automate Desktop（PAD）を使用して、データ処理の時間短縮と自動化を図り、チーム全体がデジタルツールに慣れてもらう
- **目標**: チーム全体の業務効率を向上させるための仕組みを確立する

:::


その中でもPADに興味を示してくれた２名（上司と同僚）からフィードバックを頂きました。



### 上司と同僚の紹介
:::note info
**上司（統括リーダー 40歳 男）**
  - 関東ブロックを統括
  - 資料作成やデータ処理に多くの時間を費やしている
  - 店舗の巡回ができないのが課題
  - PADについては知識があるが、使用は今回が初めて
:::

:::note info
**同僚（複数店舗を巡回している薬剤師 35歳 男）**  
  - 複数店舗を巡回
  - デジタルツールに詳しくない
  - 主な業務は店舗教育
  - データ編集に時間がかかり、業務が滞ることがある
:::

## 使ってもらった感想（フィードバック）
### フィードバックを受ける際の質問内容
::: note warn
- **業務のどの部分で役立つと感じましたか？**
  
  
- **完全自動化への抵抗感はありましたか？**
  

- **他に改善できるポイントはありますか？**
  

- **自分でもこのツールを使ってみたいと思いましたか？**
 
:::


### フィードバック内容

:::note info 
**上司（統括リーダー 40歳 男）**

- **自動ログイン**: ワンクリックで簡単にログインできることを評価
- **完全自動化**: 完全自動化を推奨
- **ファイルの見やすさ**: 視覚的にデータを見やすくする改善点を提案
:::
:::note info 
**同僚（複数店舗を巡回している薬剤師 35歳 男）**

- **教育的指導の懸念**: 時間を割けないため、ファイルの見やすさを強調
- **自動化のメリット**: 他の仕事をしながらの自動処理を評価
- **フローの長さ**: フローが長すぎることへの懸念を示す
:::

### フィードバックに基づく改善点

:::note success
- **完全自動化**: 最初は手動操作を含めて部分自動化していたが、フィードバックに基づき最終的に完全自動化に移行した。
- **ファイルの見やすさ**: ダウンロードしたファイルの自動加工機能を追加し、データを見やすく整理。
- **フローの簡潔化**: 操作が負担にならないように、フローを短くする工夫をした。
:::
## フィードバックを基にした改善


### VBAを使ってデータを見やすくしよう！
ダウンロードしたファイルが見づらかったため、VBAで自動整形機能を追加しました。
ついでに、「ダイアログでのファイル選択」から、自動でファイルを選択するように設定します。
![改良１ (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839271/df6cd9b3-f6a1-a3dc-e4ac-a7d0f9343f39.png)
![改良２ (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839271/fae3a5f7-b0fe-8058-b208-718989f45dd9.png)


![いいかんじ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839271/0ea9f4ef-6d57-c527-a23f-d57690db99ba.png)
予め設定したマクロがPADで自動化されます。


### VBAマクロコードの例

以下は、必要なエリア部分を抽出し、特定店舗のセルに色を変更し、ウィンドウ枠を固定するVBAコードです。
<details>
<summary>🐶クリックしてVBAコードを表示🐶</summary>
```vba
Sub 色の変更と行削除_枠追加_ウィンドウ固定_列も固定()
    Dim lastRow As Long
    Dim lastCol As Long
    Dim i As Long
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 実際のシート名に変更

    ' 最終行と最終列を取得
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

    ' 末尾からループする（逆方向で行を削除）
    ' 1行目は消さないので、2行目以降をチェック
    For i = lastRow To 2 Step -1
        ' A列のセルに「」が含まれていない場合、その行を削除
        If InStr(ws.Cells(i, 1).Value, "") = 0 Then
            ws.Rows(i).Delete
        End If
    Next i

    ' 最終行の再取得（行削除後に変更される可能性があるため）
    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

    ' 色の変更：B列に「」「」「」が含まれるセルの行の色を変更
    ' 1行目は消さないので、2行目以降をチェック
    For i = 2 To lastRow
        If InStr(ws.Cells(i, 2).Value, "") > 0 Or _
           InStr(ws.Cells(i, 2).Value, "") > 0 Or _
           InStr(ws.Cells(i, 2).Value, "") > 0 Or _
           InStr(ws.Cells(i, 2).Value, "") > 0 Then
            ws.Range("A" & i & ":R" & i).Interior.Color = RGB(255, 255, 0) ' 黄色に変更
        End If
    Next i

    ' 1行目に太枠を設定
    ws.Range(ws.Cells(1, 1), ws.Cells(1, lastCol)).Borders.LineStyle = xlContinuous
    ws.Range(ws.Cells(1, 1), ws.Cells(1, lastCol)).Borders.Weight = xlThick ' 太枠

    ' 2行目以降に普通の枠を設定
    For i = 2 To lastRow
        If Application.WorksheetFunction.CountA(ws.Rows(i)) > 0 Then ' データがある行だけ枠を適用
            ws.Range(ws.Cells(i, 1), ws.Cells(i, lastCol)).Borders.LineStyle = xlContinuous
            ws.Range(ws.Cells(i, 1), ws.Cells(i, lastCol)).Borders.Weight = xlThin ' 普通の太さ
        End If
    Next i

    ' 1行目とB列のウィンドウ枠の固定
    ws.Cells(2, 3).Select ' B列と2行目を基準にしてウィンドウ枠を固定
    ActiveWindow.FreezePanes = True

End Sub
</details> 



結果として配信できるぐらいにはなりました。

![完成版.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839271/eef77719-7d77-b617-d281-1a9863579002.png)

以上で、冒頭の動画のように完全自動でメール配信まで行ってくれるようになります。

### 気を付けるポイント

::: note warn
- **ネットワークの不安定さ**: データのダウンロード前後に待機時間を設け、ネットワークの安定を確保しましょう

- **マクロの連携**: マクロ名を間違えるとフローが動作しません。正確に入力し、事前にテストを

- **メールの複数送信**: 複数宛先には、「;」で区切ることが必要です
:::

## フィードバックを受けてみて感じたこと

デジタルに慣れていない人に複雑なフローを説明しても興味を持ってもらえないと感じました。最初は簡単なフローから始め、徐々に機能を拡張することで、チーム全体の業務効率を向上させることができました。小さな成功体験を提供することで、デジタルツールへの理解と信頼が深まりました。

## まとめ
シンプルな自動化から始めることで、チームの効率化に一歩前進できたと思います。デジタルツールを活用する際には、徐々に慣れてもらうステップを踏むことが重要だと感じました。今後も継続的に改良を重ね、より効果的な業務フローを目指していきます。