• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【Excel_VBA】セルに連動したシート削除)

【Excel_VBA】セルに連動したシート削除

このQ&Aのポイント
  • ExcelのVBAで実装可能かと思うのですが、シートがかなりたくさんあるエクセルブックがあります。各シートの指定のセルに文字列の有無を判断し、文字列が無い場合はそのシートを消す方法を教えてください。
  • また、いくつかのシートは文字列の有無に関係なく残したいという要件もあります。これらのシートを特定する方法も教えてください。
  • VBAに詳しくないので、実装可能かどうかも不明です。実装可能であれば具体的な方法を教えていただけると助かります。実装が難しい場合は参考サイトの情報も教えていただけるとありがたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

#2です。 Range("B13") の部分は Sh.Range("B13") とシートを特定する書き方にしてください。 sh.Select は不要のはずです。いくらかでも実行が速くなるかな。 With Sh .Range("B13") =・・・ <ーー最初にドットがあるよ。 End With なんて書き方も出来る。

kayomana
質問者

お礼

なるほどありがとうございます。 For Each ~~ In Worksheets という文のおかげで色々なものが簡単に実装できました。 ありがとうございました!

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

標準モジュールに 新規の白紙ブックでテストしてみて納得後、ブックをコピーしてテストすること。 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など

kayomana
質問者

お礼

ありがとうございます! ご回答を参考にし、以下のように書いてみました。 実行すると思った通りにできましたが もし変な所があればご指摘くださいませ!ありがとうございました! 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)
回答No.1

やるべき事を整理して,その通り作動するマクロを淡々と記述するだけのことです。 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

kayomana
質問者

お礼

ありがとうございます! 3)の所定の文字列を含むセルを検索は 意図したものとは少し違いましたが 全体的に参考になりました!!! ありがとうございました

関連するQ&A