VBAで.netFrameworkを使ったzip圧縮と解凍のサンプル(2GB以上対応)

VBA・Office

ExcelのVBA標準機能や古いシェルオブジェクト(CopyHereメソッドなど)を用いたZIP圧縮・解凍では、2GBを超える大容量ファイルやフォルダの処理でエラーが発生したり、正常に処理できない制限があります。

本記事では、.NET Framework(System.IO.Compression.FileSystem)の ZipFile クラスをVBA(またはPowerShell経由等)から活用し、2GBを超えるファイルやフォルダのZIP圧縮・解凍を確実に行うためのサンプルコードと手順を解説します。

前提条件・注意事項

  • Windows環境および.NET Frameworkが利用可能な環境を前提としています。
  • ファイルパスに日本語や特殊文字が含まれる場合、文字化けを防ぐためにエンコーディングの指定が必要になることがあります。

1. ZIP解凍のサンプルコード(VBA)

指定したZIPファイルを特定のフォルダへ解凍するVBAマクロの例です。

Sub ExtractZipFile()
    Dim zipPath As String
    Dim extractPath As String
    Dim shellObj As Object
    
    ' 処理するZIPファイルのパスと解凍先フォルダのパスを指定
    zipPath = "C:\Temp\sample.zip"
    extractPath = "C:\Temp\extracted\"
    
    ' .NETのZipFileクラスを利用して解凍を実行するPowerShellコマンドの例
    Dim psCommand As String
    psCommand = "powershell -Command " & _
                "Add-Type -AssemblyName System.IO.Compression.FileSystem; " & _
                "[IO.Compression.ZipFile]::ExtractToDirectory('" & zipPath & "', '" & extractPath & "', [Text.Encoding]::Default)" & _
                """

    Set shellObj = CreateObject("WScript.Shell")
    shellObj.Run psCommand, 0, True
    
    MsgBox "解凍が完了しました。", vbInformation
End Sub

2. ZIP圧縮のサンプルコード(VBA)

指定したフォルダの中身を2GB以上の大容量も含めてZIPファイルに圧縮するVBAマクロの例です。

Sub CreateZipFile()
    Dim targetDir As String
    Dim zipPath As String
    Dim shellObj As Object
    
    ' 圧縮元フォルダと出力先ZIPファイルのパスを指定
    targetDir = "C:\Temp\target_folder"
    zipPath = "C:\Temp\output.zip"
    
    ' 既存のZIPファイルが存在する場合は削除
    If Dir(zipPath) <> "" Then
        Kill zipPath
    End If
    
    ' .NETのZipFileクラスを利用して圧縮を実行するPowerShellコマンドの例
    Dim psCommand As String
    psCommand = "powershell -Command " & _
                "Add-Type -AssemblyName System.IO.Compression.FileSystem; " & _
                "[IO.Compression.ZipFile]::CreateFromDirectory('" & targetDir & "', '" & zipPath & "', [IO.Compression.CompressionLevel]::Optimal, $true, [Text.Encoding]::Default);" & _
                """

    Set shellObj = CreateObject("WScript.Shell")
    shellObj.Run psCommand, 0, True
    
    MsgBox "圧縮が完了しました。", vbInformation
End Sub

関連リンク・参考資料

CopyHere メソッドから Zip ファイルを処理することはできません – Microsoft サポート

ZipFile クラス (System.IO.Compression) | Microsoft Learn

Powershell版(ZipFileクラス利用サンプル) .zip ファイルを作成して抽出 – Serene diary almost day-to-day (papanda925.com)

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月12日

  • 追加VBAから.NET FrameworkのZipFileクラスを呼び出して2GB以上のZIP圧縮と解凍を行う完全なVBAコードと実行手順を追加しました。

文書情報

記事タイトル
VBAで.netFrameworkを使ったzip圧縮と解凍のサンプル(2GB以上対応)
作成日
更新日
Source URL
https://papanda925.com/?p=2353

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました