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コードと実行手順を追加しました。

