業務で受け取るデータは、CSVやExcelのままではなくZIP形式で圧縮されていることが少なくありません。
例えば、
- 本社から送られてくる売上データ
- 取引先から受領するマスタデータ
- Webシステムからダウンロードした集計データ
- バックアップファイル
などです。
結論から言うと、Access VBAでZIPファイルの解凍からCSV取込までを自動化することで、日常業務の手間を大幅に削減できます。また、Microsoft Copilotを活用することで、ZIP操作のVBA作成やエラー解析も効率化できます。
- ZIPファイル対応が必要な理由
- AccessでZIPファイルを扱う考え方
- 逆引き① ZIPファイルの存在確認をしたい
- 逆引き② ZIPファイルを解凍したい
- 逆引き③ PowerShellで解凍したい
- 逆引き④ 解凍後のCSVを取り込みたい
- 逆引き⑤ ZIPファイル名を取得したい
- 逆引き⑥ 取込後にZIPを移動したい
- 実務でよくある構成
- ZIP内のファイル数を確認したい
- 解凍先フォルダを事前作成する
- 実務活用例① 売上データ自動取込
- 実務活用例② 顧客マスタ更新
- 実務活用例③ バックアップ復元
- ログ管理を実装する
- エラー処理を実装する
- Copilot活用術① ZIP自動化コード生成
- Copilot活用術② エラー解析
- Copilot活用術③ 保守改善
- ZIP処理導入時の注意点
- AccessとCopilotの組み合わせが有効な理由
- まとめ
ZIPファイル対応が必要な理由
データ連携の現場ではZIP形式が広く利用されています。
その理由は次の通りです。
- ファイルサイズ削減
- メール送信容量対策
- 複数ファイルの一括配布
- バックアップ保管
しかし利用者側では、
ZIP解凍
↓
保存
↓
Access起動
↓
取込実行
という手作業が発生します。
この部分を自動化することで業務効率は大きく向上します。
AccessでZIPファイルを扱う考え方
Access単体にはZIP解凍機能はありません。
そのため、
- Windows標準機能
- PowerShell
- Shell.Application
などを利用します。
Access VBAから外部機能を呼び出して解凍を実現します。
逆引き① ZIPファイルの存在確認をしたい
まずは対象ファイルを確認します。
If Dir("C:\Import\Data.zip") <> "" Then
MsgBox "ZIPファイルがあります"
End If
自動化の基本です。
逆引き② ZIPファイルを解凍したい
Windows標準機能を利用する例です。
Dim objShell As Object
Set objShell = CreateObject("Shell.Application")
objShell.Namespace("C:\Work").CopyHere _
objShell.Namespace("C:\Import\Data.zip").Items
Set objShell = Nothing
解凍先フォルダへ展開できます。
逆引き③ PowerShellで解凍したい
近年はこちらの方法も増えています。
Shell _
"powershell Expand-Archive " & _
"-Path C:\Import\Data.zip " & _
"-DestinationPath C:\Work", _
vbHide
シンプルに実装できます。
逆引き④ 解凍後のCSVを取り込みたい
解凍後は通常のCSV取込です。
DoCmd.TransferText _
acImportDelim, _
"", _
"T_SALES", _
"C:\Work\Sales.csv", _
True
定型処理として組み込めます。
逆引き⑤ ZIPファイル名を取得したい
フォルダ内のZIPを取得します。
Dim strFile As String
strFile = Dir("C:\Import*.zip")
Do While strFile <> ""
Debug.Print strFile
strFile = Dir()
Loop
複数ファイルの自動処理が可能になります。
逆引き⑥ 取込後にZIPを移動したい
処理済み管理は重要です。
Name _
"C:\Import\Data.zip" As _
"C:\Complete\Data.zip"
再取込防止になります。
実務でよくある構成
例えば売上データ取込の場合です。
売上ZIP受信
↓
監視フォルダ保存
↓
自動解凍
↓
CSV読込
↓
テーブル登録
↓
ログ保存
↓
処理済移動
担当者の作業をほぼゼロにできます。
ZIP内のファイル数を確認したい
取込前チェックに利用します。
Set objZip = _
objShell.Namespace(strZip)
Debug.Print objZip.Items.Count
欠落データ防止に役立ちます。
解凍先フォルダを事前作成する
存在確認が必要です。
If Dir("C:\Work", _
vbDirectory) = "" Then
MkDir "C:\Work"
End If
運用時のエラーを防止できます。
実務活用例① 売上データ自動取込
毎朝送られてくるZIPファイルを処理します。
ZIP受信
↓
解凍
↓
CSV取込
↓
売上更新
非常に多い利用例です。
実務活用例② 顧客マスタ更新
本社から配布されたデータを反映します。
顧客マスタZIP
↓
解凍
↓
更新クエリ
↓
反映
保守運用の負荷を削減できます。
実務活用例③ バックアップ復元
万一のときに活用できます。
ZIP保存
↓
解凍
↓
Accessへ復元
災害対策や運用保守で役立ちます。
ログ管理を実装する
運用開始後は履歴管理が必須です。
T_ZIP_LOG
| 項目 |
|---|
| 処理日時 |
| ZIP名 |
| 解凍結果 |
| 取込件数 |
| 利用者 |
ログを保存します。
CurrentDb.Execute _
"INSERT INTO T_ZIP_LOG " & _
"(処理日時,ZIP名) " & _
"VALUES(Now(),'DATA.ZIP')"
障害調査が容易になります。
エラー処理を実装する
ファイル操作ではエラー対策が重要です。
On Error GoTo ErrHandler
'処理
Exit Sub
ErrHandler:
MsgBox _
Err.Number & vbCrLf & _
Err.Description
Access運用では標準実装にすることをおすすめします。
Copilot活用術① ZIP自動化コード生成
Copilotには具体的に依頼します。
Access VBAでZIPファイルを解凍し、
CSVを自動取込するコードを作成してください。
条件
・エラー処理あり
・ログ出力あり
・処理済フォルダへ移動
かなり実践的なコードを生成できます。
Copilot活用術② エラー解析
例えば次のようなエラーです。
実行時エラー 76
パスが見つかりません
Copilotへ入力すると、
- 発生原因
- 確認ポイント
- 修正案
を短時間で整理できます。
Copilot活用術③ 保守改善
既存コードを提示して、
保守性改善案を教えてください
と依頼すると、
- 関数化
- 共通化
- 命名規則改善
- ログ強化
などの提案が期待できます。
ZIP処理導入時の注意点
大容量ファイル
解凍時間が長くなる場合があります。
上書き確認
同名ファイルの扱いを決める必要があります。
権限設定
共有フォルダアクセス権を確認します。
ウイルス対策
受領ファイルの事前チェックが重要です。
ログ肥大化
定期的なメンテナンスを実施します。
AccessとCopilotの組み合わせが有効な理由
近年は生成AIの普及によりAccess開発の進め方も変化しています。
Copilotを活用することで、
- VBAコード生成
- SQL作成支援
- エラー解析
- ドキュメント作成
を効率化できます。Access開発者の支援ツールとして活用が広がっています。
特にZIP処理のような少し特殊なコードは、Copilotとの相性が非常に良い領域です。
まとめ
ZIPファイル対応は地味に見えますが、実務現場では非常に効果の高い自動化テーマです。
特に、
- 売上データ取込
- 顧客マスタ更新
- バックアップ運用
- 他システム連携
などで大きな効果を発揮します。
また、Copilotを活用することで、
- コード作成
- エラー解析
- 保守改善
- ドキュメント作成
を効率化できるため、短期間で品質の高いAccessシステムを構築できます。
今後も外部システムとのデータ連携は増加すると考えられます。ZIP自動処理はその第一歩として非常に有効な機能ですので、ぜひ導入を検討してみてください。

コメント