[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特定のシートを一括削除する方法』(VBA初心者)
別フォルダ内にある複数のブックの特定のシートを一括削除する方法をご教示いただきたいです。
削除するシート名は、現在開いているブックのシート名と同じです。
宜しくお願いいたします。
< 使用 Excel:Office365、使用 OS:Windows7 >
(隠居じーさん) 2019/11/12(火) 16:29
(1)フォルダを巡回して、ファイルを1つずつチェックしExcelブックだったら開く (2)開いたブックのシートを巡回して、シート名が、現在開いているブック(マクロブック?)のシート名と一致するかチェック (3)(2)が真だったら、シートを削除 (4)開いたブックを上書き保存して閉じる
というのを繰り返せば良いように思います。その上で、確認ですが
■1
現在どこまで手を付けていますか?動かなくても良いので現状のコードがあれば見せてください。
((1)の部分でアプローチがいくつかあるとおもうので、どの作戦でいくつもりなのかの確認を含めて聞いてます)
■2
1と関係しますが、サブフォルダも検索対象になりますか?
また、現在開いているブック(マクロブック?)と同じ名前のものはありますか?
■3
>現在開いているブックのシート名と同じです。
例えば開いているブックに「あ」「い」「う」というシートがあったら、いずれかのシート名に一致したら削除するという理解で良いですか?
また、マクロを実行する直前に複数のブックが同時に開いているケースはないのですか?(開いているブック=マクロを記述するブックということであれば問題はないですが、開いている複数のブックから、シート名のリストを作って、リストと合致するか調べる。なんてケースだったらちょっと説明が大変なのでその確認です。)
■4
シートを削除した結果、ブックにシートが存在しない状態になるケースの場合はどうしますか?
(そのようなケースは無いということであれば問題は無いです)
(もこな2) 2019/11/12(火) 16:33
もなこ2様
■1
大変お恥ずかしいのですが、自分でマクロを書くことができないため、上記のようなやりたいことを書くだけの質問になってしまいました。
■2
サブフォルダも検索対象にしたいと考えています。フォルダ内には、現在開いているエクセルと同じ名前はない状態です。
■3
例えば開いているブックに「あ」「い」「う」というシートがあったら、いずれかのシート名に一致したら削除するという理解で良いですか?
→はい、そのとおりです。
また、マクロを実行する直前に複数のブックが同時に開いているケースはないのですか?
→ブック(エクセル)が開いていないケースになります。
■4
シートを削除した結果、ブックにシートが存在しない状態になるケースの場合はどうしますか?
→そのケースはない前提で問題ございません。
コードもない状態で投稿してしまい大変申し訳ございせん。
(VBA初心者) 2019/11/12(火) 18:31
(隠居じーさん) 2019/11/13(水) 09:14
(べん) 2019/11/13(水) 12:15
今回、やりたいことはシート内容の更新になります。
1.エクセルで原本となるシートを1つ作り、それをフォルダ内にある複数のエクセルに追加 ← ここまではできています。
2.原本の修正があった場合に、複数のエクセルに追加したシートを一度削除する ← ここが今回やりたいことになります。
3.1と同じ方法で再度原本のシートを追加する
ということがしたいと考えています。
説明下手で申し訳ございません。
(VBA初心者) 2019/11/13(水) 13:46
(隠居じーさん) 2019/11/13(水) 13:59
"質問"であれば、わかる範囲でお答えしますが、作成・改造依頼であればお断りします。
'--------------------------------------------------------------------- Option Explicit Dim 配列() As String '--------------------------------------------------------------------- Sub さんぷる() Dim i As Long Dim buf As Worksheet
ReDim 配列(ThisWorkbook.Worksheets.Count - 1)
For i = 1 To ThisWorkbook.Worksheets.Count 配列(i - 1) = ThisWorkbook.Worksheets(i).Name Next
With Application.FileDialog(msoFileDialogFolderPicker) If .Show Then Call 実行部(.SelectedItems(1)) End With
End Sub '--------------------------------------------------------------------- Sub 実行部(Path As String) Dim FSO As Object, Folder As Variant, File As Variant Dim WS As Worksheet Dim tmp As Variant Set FSO = CreateObject("Scripting.FileSystemObject")
For Each Folder In FSO.GetFolder(Path).SubFolders Call 実行部(Folder.Path) Next Folder
Application.DisplayAlerts = False For Each File In FSO.GetFolder(Path).Files If File.Name Like "*.xls?" Then With Workbooks.Open(File.Path) For Each WS In .Worksheets
'▼filter関数で要素を検索 tmp = Filter(配列, WS.Name)
'▼戻り値配列のサイズで要素の有無を判定 If UBound(tmp) <> -1 Then WS.Delete Next WS
'▼上書き保存して閉じる '上書き保存(本当に上書きしてよいのかわからないので必要に応じて自力で書いてください) .Close
End With End If Next File Application.DisplayAlerts = True
End Sub
軽くテストした限りでは、Excel2007/Windows10で動作しています。
(もこな2) 2019/11/13(水) 14:49
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.