VBA拡張版:ZIPファイルにパスワードを設定してセキュアに送信
ここまでで「複数ブックをZIP圧縮してメール添付」する方法を紹介しました。今回はさらに拡張して、ZIPファイルにパスワードを設定してセキュアに送信するテンプレートです。これにより、受信者以外がファイルを開けないようにセキュリティを強化できます。
注意点
- Windows標準のZIP機能(Shell.Application)ではパスワード設定ができません。
- 外部ツール(例:7-Zip, WinRAR, PowerShellのCompress-Archiveでは不可)を利用する必要があります。
- VBAからは Shellコマンドで7-Zipを呼び出すのが一般的です。
サンプルコード(7-Zipを利用)
以下は、7-Zipをインストール済みで 7z.exe が利用可能な環境を前提としています。
Option Explicit
Sub SendSecureZipMail()
Dim zipFilePath As String
Dim filesToZip As Variant
Dim password As String
Dim sevenZipPath As String
Dim cmd As String
'=== ZIPファイルパス ===
zipFilePath = ThisWorkbook.Path & "\secure_report.zip"
'=== 対象ファイル ===
filesToZip = Array( _
ThisWorkbook.Path & "\Sales.xlsx", _
ThisWorkbook.Path & "\Error.xlsx", _
ThisWorkbook.Path & "\Stock.xlsx")
'=== パスワード設定 ===
password = "Secret123!"
'=== 7-Zipのパス(環境に合わせて変更) ===
sevenZipPath = """C:\Program Files\7-Zip\7z.exe"""
'=== コマンド生成 ===
' a = add to archive, -p = password, -y = overwrite without prompt
cmd = sevenZipPath & " a -tzip """ & zipFilePath & """ -p" & password & " -y"
Dim i As Integer
For i = LBound(filesToZip) To UBound(filesToZip)
cmd = cmd & " """ & filesToZip(i) & """"
Next i
'=== ZIP作成実行 ===
Shell cmd, vbHide
'=== メール送信 ===
Dim objMsg As Object, objConf As Object
Set objMsg = CreateObject("CDO.Message")
Set objConf = CreateObject("CDO.Configuration")
' SMTP設定(例:Office365)
With objConf.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "your_account@domain.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "your_password"
.Update
End With
With objMsg
Set .Configuration = objConf
.From = "your_account@domain.com"
.To = "admin@domain.com"
.Subject = "【VBAタスク通知】セキュアZIPレポート(パスワード付き)"
' ZIPファイルを添付
.AddAttachment zipFilePath
' HTML本文
.HTMLBody = _
"<html><body>" & _
"<h2 style='color:red;'>🔒 セキュアZIPレポート</h2>" & _
"<p>Sales.xlsx・Error.xlsx・Stock.xlsx をパスワード付きZIPにまとめました。</p>" & _
"<p>パスワードは別途安全な方法でお知らせします。</p>" & _
"</body></html>"
.Send
End With
MsgBox "パスワード付きZIPを添付したメールを送信しました", vbInformation
End Sub
VBこの拡張版のポイント
- 7-Zipを利用 → VBA単体ではパスワード付きZIP不可
- ShellコマンドでZIP作成 →
7z.exe a -tzip -pPASSWORD - メール送信時はパスワードを別経路で通知 → セキュリティ強化
実務でのメリット
- セキュリティ強化 → ZIPにパスワードを設定して情報漏洩を防止
- 柔軟性 → 元ファイルをそのまま配信可能
- 完全自動化可能 → タスクスケジューラと組み合わせれば「毎月のセキュアZIPレポート」を自動送信
✅ まとめ
- VBA単体では不可 → 7-Zipなど外部ツールを利用
- Shellコマンドでパスワード付きZIPを作成
- メール添付してセキュアに配信


