業務自動化で脱・手作業!一人事務のDX活用術 | RPA・自動化ツール

業務自動化で脱・手作業!一人事務のDX活用ブログ|RPA・自動化ツールで業務をもっとラクに、もっとスマートに

VBA vs Power Automate Desktop: ファイル比較とコピーの最速方法は?

VBA vs Power Automate Desktop: ファイル比較とコピーの最速方法は?

ローカルの共有フォルダや、別のファイルサーバーを利用している場合、更新通知が届かないことに困った経験はありませんか?

筆者もその課題に直面し、解決策を模索してきました。

以前、Power Automate Desktop(PAD)を使って、「前回と今回を比較して増えているファイルのみをコピーする」処理を作成しました。

keiridx.net

しかし、処理速度が遅く、特に大量のデータを扱う場面では効率的な運用が難しく、限界を感じました。

そこで、VBAを使用して同じ処理を試みたところ、処理速度が圧倒的に向上し、効率よく差分ファイルのコピーが可能になったのです。

VBAとPower Automate Desktopの比較

VBAとPower Automate Desktop(PAD)の使い分けについて、以下のように比較しました。

速度の違い

Power Automate Desktopは、ローコードツールとして非常に便利で、視覚的に操作できるため直感的に理解しやすいのが特徴です。

しかし、処理を1行ずつ行うため、大量のファイルを比較したりコピーしたりする際に、処理速度が遅くなることがあります。

一方、VBAは一括処理を行うため、非常に高速に動作します。特に、ファイルの比較やコピー処理に関しては、VBAの方が圧倒的に効率的でした。

具体的なVBAコード

以下は、VBAを使用して前回と今回のファイル差分を比較し、増えているファイルのみをコピーする処理のコードです。これを使えば、効率よくファイルのコピーを行えます。

◆方法◆

Excelを起動し、開発→マクロ→編集
VBAコードを記入
folderA,B,Cのパスを書き換えてください。VBA vs Power Automate Desktop: ファイル比較とコピーの最速方法は?

-------------------
Sub CompareAndCopyDiffFiles()
    Dim folderA As String, folderB As String, folderC As String
    Dim fso As Object
    
    ' --- フォルダパスの設定(末尾に必ず "\" を付ける) ---
    folderA = "C:\folder\folder\前回\"
    folderB = "C:\folder\folder\今回\"
    folderC = "C:\folder\folder\差分\"
    
    ' FileSystemObjectの作成
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' フォルダCが存在しない場合は作成(コピー先は平坦にファイルだけ置く)
    If Not fso.FolderExists(folderC) Then
        fso.CreateFolder folderC
    End If
    
    ' フォルダBを再帰的に走査
    CompareFolder fso, folderA, folderB, folderC, ""
    
    Set fso = Nothing
    MsgBox "差分ファイルのみがフォルダCにコピーされました。", vbInformation
End Sub

'---------------------------------------------------------
' CompareFolder
'  ・folderARoot: フォルダAのルートパス
'  ・folderBRoot: フォルダBのルートパス
'  ・folderC: コピー先フォルダ(平坦にファイルを配置)
'  ・relPath: 現在の相対パス(最初は "")
'
'  フォルダBの現在の相対フォルダ内で、各ファイルについて、
'  フォルダAの同じ相対位置にファイルがなければ、コピー先フォルダCへ
'  「ファイルのみ」をコピーします。サブフォルダ自体はコピーしません。
'---------------------------------------------------------
Sub CompareFolder(fso As Object, folderARoot As String, folderBRoot As String, folderC As String, relPath As String)
    Dim currentFolderB As String, currentFolderA As String
    Dim folderBObj As Object, fileItem As Object, subFolder As Object
    Dim newRelPath As String
    
    currentFolderB = folderBRoot & relPath
    currentFolderA = folderARoot & relPath
    
    ' フォルダB側の現在のフォルダを取得
    Set folderBObj = fso.GetFolder(currentFolderB)
    
    ' --- 現在のフォルダ内の各ファイルについてチェック ---
    For Each fileItem In folderBObj.Files
        ' 対応するフォルダA側のパス(ファイル名のみ)
        If Not fso.FileExists(currentFolderA & fileItem.Name) Then
            ' フォルダAに存在しないので、差分ファイルとしてフォルダCへコピー
            ' ※コピー先はフォルダ構造を無視して平坦にコピーする
            fso.CopyFile fileItem.Path, folderC & fileItem.Name, True
        End If
    Next fileItem
    
    ' --- サブフォルダについては再帰的に処理 ---
    For Each subFolder In folderBObj.SubFolders
        newRelPath = relPath & subFolder.Name & "\"
        CompareFolder fso, folderARoot, folderBRoot, folderC, newRelPath
    Next subFolder
End Sub

------------------------------

マクロ有効ブックで保存し、フォルダA,B,Cをそれぞれ作成して実行すれば完了です。

VBAとPower Automate Desktopのハイブリッド運用

ただし、VBAが万能というわけではありません。

WEBからファイルをダウンロードするような操作や、UI操作が必要な場合は、Power Automate Desktopの方が便利です。

VBAでは、ユーザーインターフェース操作が難しく、こういった作業に対応するのは非常に手間がかかります。

そのため、ファイルコピーや比較をVBAで実行し、UI操作やファイルダウンロードといった部分はPower Automate Desktopに任せるハイブリッド運用が最も効果的だと感じました。

ただし、処理速度ならなんでもかんでもVBA!とすると、処理によっては大量すぎて固まってしまうこともあるため、1行づつ処理する必要性があるもの(時間はかかるけど確実)は、PADの方が良いです。

その他のハイブリッド運用事例

Power Automate Desktop+αのハイブリッド運用の実例として、業務の内容に応じて様々な活用方法があります。

例えば、Googleスプレッドシート(GASを含む)やPower Queryを使って、データを自動的に処理する部分はそちらに任せ、ユーザーインターフェース操作はPower Automate Desktopに任せるといった形です。

このように、ツールごとの得意分野を活かすことで、効率化を図ることができます。

Googleスプレッドシート×Power Automate Desktop

リアルタイム更新データの処理やクラウド処理後にデータ保存し会計ソフトにアップロードするなどの処理はハイブリッド運用がおすすめ

keiridx.net

▼Power Query×Power Automate Desktop

複数ファイル結合はPower Queryが圧倒的に早く、フォルダが増えても更新検知するためハイブリッドで運用するのがおすすめ。

keiridx.net

▼PADの苦手な可視セルコピーをVBAで補う

keiridx.net

結論

ファイルの比較とコピーにおいては、VBAの方が圧倒的に速いという結論に至りました。しかし、Power Automate DesktopはUI操作やクラウドサービスとの連携に強みを持っており、両者を上手く使い分けることで業務の効率化を図ることができます。

どちらのツールもそれぞれの強みを活かし、適材適所で使うことが重要です。今後の業務改善に向けて、VBAとPower Automate Desktopのハイブリッド運用をぜひ試してみてください。

▼この記事が役に立ったらブックマークをお願いします

 VBA vs Power Automate Desktop: ファイル比較とコピーの最速方法は?

VBA vs Power Automate Desktop: ファイル比較とコピーの最速方法は?
人気ブログランキング