複数のExcelファイルからのコピペを自動化するExcelマクロ・RPA UiPathの比較

17051

 

たくさんあるExcelファイルからデータをコピーして貼り付け、コピーして貼り付けというのを繰り返しているなら、自動化はできます。
その自動化の方法を Excelマクロと RPA のUiPathで比較してみました。

 

複数のExcelファイルからデータをコピペするなんて

たとえば Excel ファイルが12個あって、それらを
・開いてコピーして別のExcelファイルに貼り付ける
・次の Excel ファイルを開いてコピーして貼り付ける
・次の Excel ファイルを開いて・・・・

といった繰り返しの作業はつらいものです。

これが毎月あったり毎週あったりすると、それだけで時間を失ってしまうでしょう。
12個のファイルが13、14、そして20、30と増えていくと、その作業時間は確実に増えていきます。

自動化すれば、そのファイルがいくつあっても手間は同じです。
めんどくさいと感じて、積極的に自動化の方法を導入していきましょう。

自動化の方法としては Excel マクロ( VBA) そして RPA が考えられます。
Excelだけの自動化であれば Excel マクロで十分です。
しかしながら RPA からプログラミングに入ったなら、 Excel の自動化も RPA でやってみるという手もあります。
ただ言われているほど、 RPA はかんたんではありません。
今回の事例で比較してみました。

なお、自動化の前提はコピーするExcelファイルで、そのデータが規則正しく一定のルールに従って入ってなければいけません。
・1つのファイルは A 列にデータがあり、別のファイルはB列にある
・1つのファイルはセルA2に数字があり、別のファイルは、 セルB21に数字がある
などといったような不規則なことがあれば、いくらなんでも自動化はできません。
(やろうと思えばできなくはないのですが余計に手間がかかります。)

まずはルールを決めて Excel ファイルを整えるということを考えましょう。
そして本当にそれをコピペする必要があるのかどうか。
もともと1つのファイルに入っていれば、自動化しなくても済みます。

大前提としてファイルを分ける必要があるのかも考えてみましょう。

 

Excelマクロで、Excelコピペを自動化

まずExcelマクロでやる方法です。
以前記事にあげた特定のフォルダに入っているExcelファイルのデータを集めるマクロを使っています。
詳しくはこちらの記事を見ていただければ。

フォルダ内のExcel・CSVを1つにまとめるマクロ | EX-IT

フォルダを指定して、そのフォルダに入っている Excel ファイルを開いてコピーし、「ファイル結合」という Excel ファイルに集めています。

それぞれのファイルはこのような形式です 。
5月の日別売上データがあり、このファイルが29店舗あります。


このままだと店舗別売上の集計や比較・分析もできませんし、会計ソフトへの記録もできません。
1つのシートにデータが集まれば、それを集計したり分析したり会計ソフトに取り込んだりすることができます。

プログラムはこんな感じです。
まあそれなりに長くはなります。

※前提として、このマクロで、フォルダをセルA1に入れています。

Sub folder()

If Application.FileDialog(msoFileDialogFolderPicker).Show = True Then
Range(“a1”).Value = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
End If

End Sub

Sub shuukei()


'シート[merge]を削除
    On Error Resume Next
    Application.DisplayAlerts = False
       Worksheets("merge").Delete
    Application.DisplayAlerts = True
    
'シート[merge]を一番右に追加
    Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "merge"
    
'フォルダの場所を変数に入れる
    Dim Folder_path
    Folder_path = ThisWorkbook.Worksheets("folder").Range("a1").Value
    
  
'集計するブックを変数に入れる
    Dim MergeWorkbook
    MergeWorkbook = Dir(Folder_path & "\*.xlsx")
   
    
'指定したフォルダから、Excelファイルを探す
    Do Until MergeWorkbook = ""
        Workbooks.Open Filename:=Folder_path & "\" & MergeWorkbook
        
    
        Dim MergeWorkbook_data  '集計するブック内のシートのデータ数
        Dim ThisWorkbook_data  '集計先のシートのデータ数
       
        
        Dim i
        For i = 1 To Workbooks(MergeWorkbook).Worksheets.Count
        
            MergeWorkbook_data = Workbooks(MergeWorkbook).Worksheets(i).Range("a" & Rows.Count).End(xlUp).Row
            ThisWorkbook_data = ThisWorkbook.Worksheets("merge").Range("a" & Rows.Count).End(xlUp).Row
            
            Workbooks(MergeWorkbook).Worksheets(i).Rows("2:" & MergeWorkbook_data).Copy ThisWorkbook.Worksheets("merge").Range("a" & ThisWorkbook_data + 1)
        Next
    
           
    '集計するブックを閉じる
        Application.DisplayAlerts = False
            Workbooks(MergeWorkbook).Close
        Application.DisplayAlerts = True
    
'次のファイルを探しに行く
        MergeWorkbook = Dir()
    Loop
   

End Sub

 

コピー元の店舗ファイルを開いて、データがいくつあるかを数えており、そのデータをすべて貼り付けています。
たとえば恵比寿店を貼り付けた後、渋谷店を貼り付けるなら、貼り付け先でデータの数を数えて、そのデータの1つ下に貼り付けなければいけません。
30行あるなら、31行目に貼り付けるということです。
最後にその店舗別のファイルを閉じています。

これをファイルの数だけ繰り返しているだけです。
ファイルがいくつあるかデータがいくつあるかというのは人間が考えなくても済みます。
あればあるだけ無限に繰り返してくれるわけです。
いくら繰り返しても疲れることもなく、ミスすることもありません。

人間がやるべきことは、
・データをルール通りに準備する
・集計したいファイルを特定のフォルダに入れる
・出てきたデータをもとに考える
といったことです。

RPA UiPathで、Excelコピペ自動化

次は RPA ツール UiPathでやってみます。
UiPathについてはこちらの記事を参考にしていただければ。
RPAツールUiPathが日本語化。UiPath再入門「ネットバンクにログインして明細を表示」 | EX-IT

Excel マクロも UiPathも、人間がやった操作を記録してくれるという機能があります。
しかしながら今回のような繰り返しは記録できません。
やるならば29回繰り返すか、1回繰り返してそれを29個コピーするかしかないのです。
しかしながら、そうやっても、その後に29個が30個となった場合は、そのプログラムは正しく動かないことになります。

UiPathでも Excel マクロと同様に、記録ではなくプログラムをつくっていきましょう。
UiPathではこの左側のアクティビティというパーツを組み合わせていけば、プログラミング知識がなくても自動化・m効率化ができるといわれています。


しかしながら、今回のような「特定のファイルにあるもので繰り返して処理をする」というパーツはがありません。
何らかの方法で工夫しなければいけないのです。

フォルダの中で繰り返しをするのであれば[繰り返し]というアクティビティを使います。
コレクションといわれるものの中で繰り返すという意味で、今回の場合はファイルを指定します。
ファイルの指定はコレクションに次のようなものを入力しなければいけません 。

Directory.GetFiles(“C:\Users\info0\Dropbox\0 INBOX”,”*.xlsx”)。

Dictionary.GetFiles()
で、()のの中にフォルダを指定してファイル名を入れます。
そのフォルダの Excel ファイルすべてを処理したいので、ファイル名は、*.xlsxという表現です。
*は 任意の文字が入るという意味ですので、 xlsx という拡張子がつくファイルつまり Excel ファイルについて繰り返し処理をするということを意味します 。

Excel マクロだとこの辺りに該当するものです。

 

 

この後に処理をしていきたいのですが  xlsx で指示すると~$ 〇〇.xlsxという自動保存の場合にできるファイルも読み取ってしまいます。
このファイルは、通常隠しファイルになっているのですが、 UiPathだとその場合も読み取ってしまうのです。
だからこそそういったファイルは読み込まないでくれという条件をつけなければいけません。
UiPathでは[条件分岐]アクティビティを使い、「itemつまりファイル名に~が含まれてなければ」という設定をします。

条件分岐[アクティビティ]の左側のThenは、含まれている場合は右側のElse は、含まれていない場合の処理ですので、今回は含まれていない場合=右側で処理を続けるわけです。


この処理を経て Excel ファイルを開きます。

UiPathの場合は Excel ファイルを開くというより Excel ファイルにアクセスするという意味です。
毎回開かずにそのファイルの中身を読み取りに行きます。
そのアクティビティは Excel アプリケーションスコープ です。
ファイル名は、先ほどのitemの中に入っていますので、それを文字列に変えます。
item.ToString

でファイル名を意味するものです 。

Excel アプリケーションスコープでアクセスした後、[範囲を読み込み]アクティビティでSheet1のすべてのデータを読み込みます。

””という指定をすれば、そのシートのすべてのデータを読み込むので楽です。
ここでシート名を指定しなければいけませんので、すべての店舗のデータは同じシート名でなければいけません。
サンプルではデフォルトのSheet1です。

さらには[範囲を読み込み]を選択して右側に出てくるプロパティでデータテーブルの名前を設定します。
いったん箱に入れて、それを次のステップで処理するためです。

データテーブルの横のボックスで Ctrl+Kを押せば、名前(変数)を入力できます。

ここでは ExcelTableという名前にしました。


Excel マクロだとこのあたりの処理です。
データをカウントしてデータの一番下の行を認識してそこまでをコピーしています。

データを読み取りましたので貼り付け先のデータの処理に移ります。

貼り付け先のファイルを [Excelアプリケーションスコープ]で読み込みさらに範囲を読み込みます。
読み込む範囲はシートmergeのすべてのデータです。

ここで範囲を読み込んでいるのは 、Excel マクロと同じように、恵比寿店を貼り付けた後その下に渋谷店を貼り付けなければいけないので貼り付け先のデータを数えています。
そのデータを数える下準備が[範囲を読み込み]です。

範囲を読み込んだら先ほどと同様にデータテーブルに名前をつけて格納しておきます。
ExcelDataという名前にしました。

最後に[範囲に書き込み]アクティビティで書き込み、つまり貼り付けを設定します。
mergeという名前のシートに、ExcelTableを貼り付けるわけです。
どこに貼り付けるかは右上にボックスで指定します。


画像では隠れていますが、ここには
“a” & ExcelData.Rows.Count+1
が入っています。
A は A 列を意味し、ExcelData.Rows.Count+1というのはExcelデータつまり貼り付け先のデータの行数を数えてそれに1を足しています。
貼り付け先が30行目まで入っていれば31(30+1)行目に入りつければいいからです。
31行目であればAを組み合わせて A31に読み取ったデータを貼り付けます。

Excel マクロでいうとこの辺りに該当するものです 。

 

 

なんとなく似ているのではないでしょうか。

Excel マクロと RPA は、使っている言語が違いますし、しくみも違うので、このような違いは出てきます。
どちらがよいかというのは比較していただいたとおり何ともいえません。
Excelマクロを身につければExcel内の効率化はできますが、それ以外のものはなかなか難しく、RPA だとExcelとその他のアプリの連携ができますが、やはりそれなりの難しさがあります。

自動化したいのであれば結論としては「両方覚えておくのがいい」ということにはなります。
どちらか片方をやってみて、ある程度やればもう片方の理解も進みますので、Excelでの効率化であれば Excel マクロ、Excelとその他のソフトまたはその他のソフトで効率化するのであれば 、RPA を勉強してみるといいでしょう。

なによりも「コピペコピペの毎日が嫌だ!」という、この仕事をなんとかしたいという強い気持ちが大事です。
私はその嫌だという一心でこういうことを勉強をしました。
一度作ってしまえば今回の事例だと29件のコピペの仕事が瞬時に消滅します。
一生やらなくてよくなるわけです。
このインパクトは非常に大きいものですので、ぜひトライしてみていただければ。

 

なお、今回の事例のファイル29個もExcelマクロで自動化してつくりました。
事例づくりからやっていたら大変ですので。

 

 

 

 

 

 

 

 

 

 

 

 

 



■編集後記

昨日は、予定のない日。
セミナーの準備、決算・税務申告を中心に進めました。
日曜日のレースに備えて、プールでフォームの確認も。

 

■昨日の「1日1新」

学研の図鑑 キン肉マン 超人
キャプテンアメリカ トリロジー 4KUHDをAmazon.co.ukから

■昨日の娘日記
昨日の晩御飯は娘と2人。
前日から約束していたオムライスをつくりました。
白ご飯がなく、焦りましたが…なんとか。
野菜をあまり食べないので、玉ねぎをすりおろして入れてみましたが、「おいしい」と食べてくれました。
ケチャップの絵は、「なにこれー?」と言われましたが。

Spread the love