[[20191112151514]] 『特定のシートを一括削除する方法』(VBA初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特定のシートを一括削除する方法』(VBA初心者)

別フォルダ内にある複数のブックの特定のシートを一括削除する方法をご教示いただきたいです。
削除するシート名は、現在開いているブックのシート名と同じです。
宜しくお願いいたします。

< 使用 Excel:Office365、使用 OS:Windows7 >


こんにちは ^^
1.かたっぱしからBOOKを開く
2.シートを全部精査して該当シートを削除
3.開いたBOOKを保存して閉じる
4.上をひたすら繰り返す。
おしまいです。
お困りの箇所がございましたら、お尋ねください。
m(_ _)m
でわ

(隠居じーさん) 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様ご返答いただきありがとうございます。

もなこ2様

■1
大変お恥ずかしいのですが、自分でマクロを書くことができないため、上記のようなやりたいことを書くだけの質問になってしまいました。

■2
サブフォルダも検索対象にしたいと考えています。フォルダ内には、現在開いているエクセルと同じ名前はない状態です。

■3
例えば開いているブックに「あ」「い」「う」というシートがあったら、いずれかのシート名に一致したら削除するという理解で良いですか?
→はい、そのとおりです。

また、マクロを実行する直前に複数のブックが同時に開いているケースはないのですか?
→ブック(エクセル)が開いていないケースになります。

■4
シートを削除した結果、ブックにシートが存在しない状態になるケースの場合はどうしますか?
→そのケースはない前提で問題ございません。

コードもない状態で投稿してしまい大変申し訳ございせん。
(VBA初心者) 2019/11/12(火) 18:31


おはようございます。^^
あの〜シートは削除すると元には戻せないと思います。安全対策は無くてよいのでしょうか?
私でしたらこそっと退避とっておきます、2〜3年してから【あれあったよな!】なんて言わ
れかねないですよ。←昔、本当にあったこわぁ〜いお話。。。^^;。。。で、ご自身で、挑
戦されます?それともどなたかコード作成して下さるのをお待ちしますか。でわでわm(_ _)m

(隠居じーさん) 2019/11/13(水) 09:14


余計なお世話ですが
一括削除しないと面倒なくらい同じ名前のシートが溢れかえるデータ管理の方を見直した方がよさそう。

(べん) 2019/11/13(水) 12:15


隠居じーさん様・べん様
コメントくださりありがとうございます。

今回、やりたいことはシート内容の更新になります。

1.エクセルで原本となるシートを1つ作り、それをフォルダ内にある複数のエクセルに追加 ← ここまではできています。

2.原本の修正があった場合に、複数のエクセルに追加したシートを一度削除する ← ここが今回やりたいことになります。

3.1と同じ方法で再度原本のシートを追加する

ということがしたいと考えています。

説明下手で申し訳ございません。
(VBA初心者) 2019/11/13(水) 13:46


こんにちは ^^
削除するシートには何もデータはないのでしょうか
有るけど無視する
有るのでXXXする? え! ^^; 聞いてない (^◇^)
ない

(隠居じーさん) 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


もなこ2様
都合のいいお願いだったにも関わらず、コードまで作成していただき大変申し訳ございません。
(当たり前のことだと思うのですが)今後はコードを作成して投稿するようにいたします。
本当にありがとうございました。
(VBA初心者) 2019/11/13(水) 20:34

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.