- ベストアンサー
【Excel_VBA】セルに連動したシート削除
- ExcelのVBAで実装可能かと思うのですが、シートがかなりたくさんあるエクセルブックがあります。各シートの指定のセルに文字列の有無を判断し、文字列が無い場合はそのシートを消す方法を教えてください。
- また、いくつかのシートは文字列の有無に関係なく残したいという要件もあります。これらのシートを特定する方法も教えてください。
- VBAに詳しくないので、実装可能かどうかも不明です。実装可能であれば具体的な方法を教えていただけると助かります。実装が難しい場合は参考サイトの情報も教えていただけるとありがたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 Range("B13") の部分は Sh.Range("B13") とシートを特定する書き方にしてください。 sh.Select は不要のはずです。いくらかでも実行が速くなるかな。 With Sh .Range("B13") =・・・ <ーー最初にドットがあるよ。 End With なんて書き方も出来る。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17070)
標準モジュールに 新規の白紙ブックでテストしてみて納得後、ブックをコピーしてテストすること。 Sub test01() For Each sh In Worksheets MsgBox sh.Name Next End Sub を入れて実行すると、すべてのシートをとらえていることが納得できよう。 そして sh.Name="Sheet1" Then Sub test01() For Each sh In Worksheets If sh.Name <> "Sheet1" Then MsgBox sh.Name End If Next End Sub でSheet1を飛ばすことがきっ冠できるだろう。複数の場合の書き方は勉強して。 Msgbox のところへシートの削除をsh.Deleteを入れて Sub test01() For Each sh In Worksheets If sh.Name <> "Sheet1" Then MsgBox sh.Name sh.Delete End If Next End Sub で警告は出るがSheet1 以外は削除する。 ーー >各シートの指定のセルに文字列の有無を判断し・・ #1のご回答では決った文言セルがあるかを検索しているが、それは決ったセルの値だよね? B1セルとすれば If Range("B1")="" Then Sh.Delete にする。 警告を出さないのコードは勉強して。「エクセル VBA 警告」でGoogle照会 http://dqn.sakusakutto.jp/2008/05/excel-vba.htmlなど
お礼
ありがとうございます! ご回答を参考にし、以下のように書いてみました。 実行すると思った通りにできましたが もし変な所があればご指摘くださいませ!ありがとうございました! Sub sheetdel() For Each sh In Worksheets If sh.Name <> "Sheet1" And sh.Name <> "Sheet2" And sh.Name <> "Sheet3" And sh.Name <> "Sheet4" Then sh.Select If Range("B13") = "" Then Application.DisplayAlerts = False sh.Delete Application.DisplayAlerts = True End If End If Next End Sub
- keithin
- ベストアンサー率66% (5278/7941)
やるべき事を整理して,その通り作動するマクロを淡々と記述するだけのことです。 1)シートを巡回する 2)シート名を検査して,残すべきシートならそのシートはパスする 3)所定の文字列を含むセルを検索する 4)無ければシートを削除する sub macro1() dim w as worksheet dim h as range for each w in worksheets if w.name = "Sheet1" or w.name = "Sheet2" then 'do nothing else set h = w.cells.find(what:="ある文字列") ’必要に応じて検索のオプションを正しく設定 if h is nothing then application.displayalerts = false w.delete application.displayalerts = true end if end if next end sub
お礼
ありがとうございます! 3)の所定の文字列を含むセルを検索は 意図したものとは少し違いましたが 全体的に参考になりました!!! ありがとうございました
お礼
なるほどありがとうございます。 For Each ~~ In Worksheets という文のおかげで色々なものが簡単に実装できました。 ありがとうございました!