質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

18245閲覧

ZIPファイル解凍するVBAについて

suedar91

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2018/09/25 05:53

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

VBAで、ZIPファイルを同じフォルダに解凍したいのですが、
ZIPファイル以外の全部のファイルがコピーされてしまいます。

エラーメッセージ

該当のソースコード

'ZIPファイル解凍
' Dim zipFile As Variant
Dim unzipFolder As Variant
Dim NewFile As Object

zipFile = "C:\■実績更新用" & filename7 'ZIPファイル
unzipFolder = "C:\■実績更新用" '解凍フォルダ

Set NewFile = CreateObject("Shell.Application")
NewFile.Namespace(unzipFolder).CopyHere NewFile.Namespace(zipFile).Items

'解凍後ファイル名
Dim filename8 As String

filename8 = Dir("C:\■実績更新用\日別データ_*.xlsm")
Debug.Print filename8

Range("B11") = filename8

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

初心者です。
C:\■実績更新用 というフォルダに
すでにVBAで名前を取得しているfilename7(日別データYYYYMMDD.ZIP)のZIPファイル
を解凍してエクセルファイルにしたいです。

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2018/09/25 08:49

すみません、再現しないのですが、例えばC:\testというフォルダにtarget.zipとsample.jpgをおいて、filename7にtarget.zipを代入してマクロ実行すると、target.zipが解凍され、sample.jpgがコピーされることがありませんでした。再現手順を間違っていますか?
suedar91

2018/09/26 02:39

その再現手順であっています。見ていただいて、ありがとうございます。このコードは関係ないのかもしれませんね、他のコードを見てみます。ありがとうございました。
guest

回答1

0

papinianus 様からの質問で解決済みな気がしましたが
一応載せます
@kinuasa様のZIP形式で圧縮・解凍を行うVBAマクロから
コードを引用しています。

VBA はExcelでしょうか?
もしそうであれば「F8」キーで一つずつ追ってみるのがいいかもしれません。
それもでだめならほかの方法で実装して見るのがいいかもしれません。
もし下記の方法等でやってみても同様の現象が発生するようなら
問題はそこではないと切り分けができます。

--追記--

VBAで、ZIPファイルを同じフォルダに解凍したいのですが、
ZIPファイル以外の全部のファイルがコピーされてしまいます。

もしも
Aフォルダの中に「A1.Zip」と「A2.xlsm」があって
解凍後に
Aフォルダの中に「A1.Zip」と「A1」(フォルダ) と 「A2.xlsm」
となるようにしたい場合は場合によりますが、基本的に「A1」フォルダはmkdir等で作る必要があります。

vba

1Option Explicit 2 3Sub test1() 4 5 Dim zipFile As String 6 Dim Folder As String 7 Dim filename7 As String 8 Dim ZipFolder As String 9 10 filename7 = "Zipフォルダ.zip" 11 12 Folder = "D:\Users\Desktop\実績更新用" '解凍フォルダ 13 zipFile = Folder & "\" & filename7 'ZIPファイル 14 15 UnZipFile zipFile, Folder 16 17 Dim filename8 As String 18 Dim Nm As String 19 Dim Nms 20 21 Nm = Dir(Folder & "\日別データ_*.xlsm") 22 Do While (Nm <> "") 23 Nms = Nms & " , " & Nm 24 Debug.Print Nm 25 Nm = Dir() 26 Loop 27 Nms = Mid(Nms, 4) 28 filename8 = Nms 29 30 Range("B11") = filename8 31End Sub 32 33 34 35 36Public Sub UnZipFile(ByVal SrcPath As Variant, _ 37 Optional ByVal DestFolderPath As Variant = "") 38'ZIPファイルを解凍 39'SrcPath:元ファイル 40'DestFolderPath:出力先、指定しない場合は元ファイルと同じ場所 41'※出力先に同名ファイルがあった場合はユーザー判断で処理 42 With CreateObject("Scripting.FileSystemObject") 43 If .FileExists(SrcPath) = False Then Exit Sub 44 If LCase(.GetExtensionName(SrcPath)) <> "zip" Then Exit Sub 45 If IsFolder(DestFolderPath) = False Then 46 DestFolderPath = .GetFile(SrcPath).ParentFolder.Path 47 End If 48 End With 49 50 With CreateObject("Shell.Application") 51 .Namespace(DestFolderPath).CopyHere .Namespace(SrcPath).Items 52 End With 53End Sub 54 55Private Function IsFolder(ByVal SrcPath As String) As Boolean 56 IsFolder = CreateObject("Scripting.FileSystemObject").FolderExists(SrcPath) 57End Function

投稿2018/10/10 02:04

編集2018/10/10 02:12
kamikazelight

総合スコア305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問