皆さん、こんにちは。Miyuです!
私は某小売業で人事系の業務を行ってます。主な業務の中に勤務時間外を会社の勤怠システムから抽出し確認する業務があります。そのなかで部署ごとにデータを抽出することしかできないので毎回データ同士でがっちゃんこさせています。これを自動化できないかと思い、今回は初めてPower Automate Desktopを使って自動化を試みました。また同じ人事系の業務をしている方も勤怠ではないですが、全店報告分を全て1つのファイルにまとめることが多いと聞いたので今回作ってみようと踏み出してみました。
こんなことしたい
フォルダ内にあるExcelファイルを1つにまとめる。※チェックする項目が2つあるのでシートを複製したい。←ここまで自動化したい。
ひとまず形にはなった
個人情報が含まれているため青く塗りつぶし図形が入っていますが、ちゃんと1つのExcelファイルにまとめ、シートを複製することができました。
使用したシステム
- Power Automate Desktop
「WebプラウザーやExcelなどのアプリケーションの操作やファイルの操作などを自動化することができる」
※参考Website
https://marukentokyo.jp/whatpad/
つまりパソコンのデスクトップ上でマウスやキーボードの動きを自動化したり、画面に表示されたアイコンを組み合わせて自動化したりするMicrosoft社のツールになります。
フローについて
全体フロー
フローのソースコード
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
フローの詳細
ファイルのダイアログを表示して複数のファイルの選択を可能にします。
Excelのワークシートすべてのデータを読み取り、空(何も書いていない行)から書き込んでいきます。これをExcelファイルごとに繰り返すようループを設定します。
私はデータが消えてしまうことが怖いのでひとまず保存をします。この時自分が好きなようにファイル名を変更します。
Excelのワークシートをアクティブにして、データを全て読み取り新しいワークシートに名前をつけて追加をしデータを書き込みます。
ここは追加で最初1つにがっちゃんこしたシート名を変更して保存をしました。
同じ部署内のメンバーに報告
今回作ったファイル自動がっちゃんこシステムを私の直属上司と異なる業務分野で同じようにファイルを1つにまとめる作業がある先輩へルーティン業務が楽になるかもしれないと言って見せてみました。まず今までこのように何かを効率化したいと考えていたものの実際作るということをしてこなかった部署なので「すごいね~、上回る~自動で動いてる~」「何これ?!」といったびっくりして2人ともにこにこしていました。ただし、同じ業務をしている上司からは下記のようなフィードバックをもらいました。
- (資料でWEBサイトにも自動で入れる動画を見せたら)これそもそものデータを自動でとることはできないかな
- 身近な複数のデータを1つのデータにする業務は他にたくさんあるので、そのどれにも活用できそうで
- (私自身ここからフィルターをかけて…といったデータ編集の作業も自動化のなかに入れたかったことを伝えると)それだと1つ1つに編集作業を自動で入れることが必要になるから他の業務で簡単に使えなくなる。自動化はここまでで十分。
また異なる業務をしている先輩からも同じようなフィードバックをもらいましたが、最初に1つのファイルにするとき項目だけ入れておくなど前準備があるからこれをデータをフォルダ内にいれたらすぐに1つに結合できると便利とご意見をいただきました。
自動化って便利
Power Automate Desktop自体コードやアクションが難しかったというのが今回触ってみて感じたことです。しかし1回1回コピー&ペーストするより断然作業時間が短縮されることを今回作ってみて、上司・先輩と一緒に見てみて実感しました。制作する際になかなか自分が欲しい情報、設定方法などがあまりなく自分で考えて前準備を手動で行い形にはしたものの結局フィードバックで「前準備がなくなったらいいのに」というお声もいただいたので、もっといろんな記事やホームページをみて活用できそうなものはどんどん取り入れていきたいと思いました。