Excel VBA で Zip解凍



履歴: 2021/ 6/20 初回アップ

ちょっと休憩
概要
その昔、都内のさる印刷会社からの依頼で Excelで 数万件の顧客情報から必要な情報を抜き出してリストを作成し、 案内ハガキを 4面割付プリントするシステムを作ったことがあった。
社長が契約額に釣られてホイホイ受注してきたのに、実際は奥さんが Excel上でソートやコピーを繰り返して印刷リストを出力する作業を  ほぼマニュアル操作で納期に間に合わせるために「頭にねじり鉢巻状態」だったらしい。
奥さんが「もう限界、なんとかして!」と悲鳴を上げたのを社員が聞いて、Webで私のページを探して相談してきたものだが、 まず会社に伺って作業の流れを聞いて、概要を理解し 見積もりをさせていただいた。
結果、1ヶ月ほどで一次の Excel VBAプログラムが完成し、奥さんが操作するのは数十時間 > 30分ほどに短縮。「おかげで家事が出来るようになりました。」 と感謝された。(困っている人を見ると放っておけないそんな性格が災いして、大甘な見積もりより大幅超過の作業時間になってしまった;;;涙)
その後、いろいろ相談される中で(印刷会社なのに!)リストの印刷は外注していると知って、安価な業務用インクジェットプリンタでプリントできるように 別プログラムを提案したところ、外注作業も内部に取り込むことが可能になって利益が大幅増になったとえらく感謝された。
今でもたまに、その時の縁で「Help!」と電話がかかってきて、Excelの操作の疑問や PCの不具合、プリンタの増設、受注先の プログラムの改造などの相談に乗っている。 (タダ同然!の IT担当者のような存在になってしまった。)
まあ、何だかんだ言っても リタイアの身で ヒマだから誰かのお役に立てる・社会参加していると実感できるだけで幸せなんだが。
ここでは Excelで VBAをプログラムする初期設定から、簡単なプログラムの一例として Zipファイルを解凍する方法を示す。

  1. Excelで VBAを実行する初期設定
  2. 通常の Excelを実行した状態では VBAプログラムの編集は出来ない。
    以下は一度設定すれば、以降 Excelを立ち上げると VBAプログラムの編集が可能になる。
    Excel上で VBAプログラム編集を行うには以下のように操作する。

    図-1
    ファイル」>「オプション」>「リボンのユーザー設定」で「開発」にチェックして「OK」で閉じる。

    図-2
    Excelのメニューに「開発」が表示されるのでそれを選択して、「開発」メニューリボンの中の一番左「Visual Basic」を選択。
    図-3
    Visual Basicの ウインドウが開くので、そのメニューから「挿入」>「標準モジュール」を選択。
    プロジェクト ペインの「標準モジュール」の中に「Module 1」が出来る。
    そこをクリックすると Module 1のコードが表示されるのでそこに 以下のコードをコピペする。
  3. VBA コード例
  4. ----------- ここから ------------------------------------------------
    			Sub OpenZipFile()
    
    			    Dim ZipPath    As String
    			    Dim ExpandPath As String
    			    Dim Result     As Boolean
    
    			    ZipPath = "C:\ドキュメント\Doc\Excel_Sample\Zip\test.zip"
    			    ExpandPath = "C:\ドキュメント\Doc\Excel_Sample\unZip"
    
    			    Result = UnZip(ZipPath, ExpandPath)
    
    			    If Result = True Then
    			        Call MsgBox("解凍成功" & vbCr & ExpandPath, vbOKOnly, "解凍完了")
    			    Else
    			        Call MsgBox("解凍失敗" & vbCr & ZipPath, vbOKOnly, "解凍失敗")
    			    End If
    
    			End Sub
    
    			Function UnZip(a_ZipPath As String, a_ExpandPath As String) As Boolean
    			    Dim sh      As New IWshRuntimeLibrary.WshShell
    			    Dim ex      As WshExec
    			    Dim Cmd    As String
    
    			    Cmd = "Expand-Archive -Path " & a_ZipPath & " -DestinationPath " & a_ExpandPath & " -Force"
    
    			    ' コマンド実行
    			    Set ex = sh.Exec("powershell -NoLogo -ExecutionPolicy RemoteSigned -Command " & Cmd)
    
    			    ' コマンド失敗時
    			    If ex.Status = WshFailed Then
    			        ' 戻り値に異常を返す
    			        UnZip = False
    
    			        ' 処理を抜ける
    			        Exit Function
    			    End If
    
    			    ' コマンド実行中は待ち
    			    Do While ex.Status = WshRunning
    			        DoEvents
    			    Loop
    
    			    ' 戻り値に正常を返す
    			    UnZip = True
    			End Function
    			
    ----------- ここまで ------------------------------------------------
  5. コマンドボタンの挿入
  6. 図-4
    Visual Basicの画面から 元の Excel画面に戻って、
    開発」メニューの中の 挿入」をクリックして
    フォームコントロール」の中の一番左上のアイコン「ボタン(フォームコントロール)」をクリック。
    シート上のボタンを配置する場所でマウスをドラッグしてボタンを作成。
    図-5
    そのボタンを右クリックして マクロの登録」を選択。

    図-6
    マクロの登録画面で 下のリストの中から「OpenZipFile」(上記 VBAコードのサブルーチン名)というマクロをクリックして選択、
    上の「マクロ名」の欄にその名前が表示されたのを確認して OK」をクリック。

  7. Windows Script Host Object Model の参照登録
  8. このままで上記のボタンを押すとエラーが表示されて実行できないので次のように設定する。
    図-7
    Visual Basic のウインドウに戻って、「Tool」> 「参照設定」をクリックする。
    図-8
    表示されたライブラリファイルのリストを下の方にスクロールして「Windows Script Host Object Model」を探してチェックを付けて「OK」を押す。

    以上でシート上に作成した「ボタン1」を押すことで VBAコードのパスで指定した Zip圧縮ファイルを 指定先のフォルダーに回答することが出来るようになる。
    もし エラーにならないで解凍指定先のフォルダーに何もファイルが生成されない場合は、パスの記述を見直すこと。
    更に、この例では Zip圧縮ファイルは 1ファイルを指定しているが、Dir関数などを利用することで 圧縮ファイルフォルダーに存在する 複数の Zip圧縮ファイルを 指定先のフォルダーに全て一発で解凍することも可能になる。
    もちろん、解凍したファイルの中身のデータを この Excelブックにコピーしてから必要な処理をして新しいブックにコピーしたり、 自動で印刷するなど ほとんどの操作は VBAコードで自動処理が可能になる。(それなりの知識と時間があれば!)


このページ(unzip01.html)にコメント/質問をどうぞ
タイトル(30文字以内)
コメント
お名前(ID:10文字以内)
URL(HP or ブログをお持ちの方)
パスワード*
タイトル・コメント・ID は必須です
このページ(unzip01.html)への今までのコメント/質問
このページにはまだ表示できる投稿がありません。

Back to Page top

Access Counter:  総アクセス数