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

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

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

ExcelのVBAで実装可能かと思うのですが、ご教授願いたく思います。 シートがかなりたくさんあるエクセルブックがあります。 各シートの指定のセルに文字列の有無を判断し 文字列が無い場合、そのシートを消す この作業を連続して多数の該当シートを一気に削除したいVBAは どのように記述すればよいでしょうか? また、4シートほど、表紙やリストなど上記、文字列の有無を判断せず そのまま残したいシートもあります。(このシート群は固定で増える事はありません) 上記、もし実装可能であればご教授お願いします。 また、可能だけどokwaveの入力欄では面倒だし説明しづらい、という回答でもokです。 その場合、参考サイトなど教えて頂けると幸いです。 (当方VBAには精通しておりませんが) 何卒よろしくお願いいたします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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/17068)
回答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/7940)
回答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

  • VBA:シートの追加とセルからの名前変更

    いつもお世話になっています。 ExcelのVBAで実装可能かと思うのですが、ご教授願いたく思います。 今回、大量のシートの追加(最後尾)とその追加したシートの名前を 変更するVBAを制作したいと思ったのですが シートの追加とシートの名前変更(ソースの直接記入)までは、 なんとか出来ましたが 名前を、とある範囲のセルにある文字列に変更するという事がしたいです。 例えばE1:E5までの範囲にある文字列 「あ」 「い」 「う」 「う」 「う」 とあったら、かぶっているものは除き、「あ」「い」「う」という名前のシートを3つ追加したいという事です。 上記、もし実装可能であればご教授お願いします。 また、可能だけどokwaveの入力欄では面倒だし説明しづらい、という回答でもokです。 その場合、参考サイトなど教えて頂けると幸いです。 何卒よろしくお願いいたします。

  • 【Excel VBA】シート間で重複していない値を知りたい

    こんにちは。Excel VBAについてのご質問です。 「シートA」と「SheetB」があるのですが(同ブックです)、 ・「SheetB」のE列の数値と「シートA」のC列の数値を見比べて  「シートA」のC列にない数値があった場合、  「SheetB」のその数値を含む行を赤色に変換する。 ・上記の作業が終了したら「完了」というメッセージボックスを出す。 というマクロを組みたいのですがうまくいきません。 お分かりになる方がいらっしゃいましたら、ぜひお教え下さい。 宜しくお願い致します。

  • VBAで別ブックのシートを指定して削除したい。

    VBAで別ブックのシートを指定して削除したい。 エクセルでVBAを使用して、別ブックのシートを削除するアプリを作成しています。 これらのマクロを記述するエクセルとは別ブックのシートを削除したいです。 以下の記述だと、削除がされないようなのですがどのように記載したら 別ブックのシートを削除することが可能でしょうか。 エラー等は出ません。また、別ブックの情報も取ってこれているようですが、 削除ができません。。 どなたか教えてください。 'Excelを起動し、ファイルを開く Set xl = CreateObject("Excel.application") xl.Workbooks.Open fileName:=fileFullPath, ReadOnly:=False, IgnoreReadOnlyRecommended:=True '※fileFullPathがオープンするエクセルファイルです。 '"一覧"シートの1列目に「公開時削除」という文字が入っている行の2列目のテーブル名を取得 'シートの削除 Application.DisplayAlerts = False xl.ActiveWorkbook.Worksheets(deleteTableName).Delete   Application.DisplayAlerts = True   '※deleteTableNameは削除したいシートの名前が入ります。

  • エクセルVBAをつかってフォルダ内のファイルの特定シートのデータを1つのシートにまとめる

    はじめまして。 過去ログ検索しましたが、載っていないようなので投稿させていただきます。 ブックAがあるフォルダ内にある「○年*.xls」のさらに「○月(○月以外のシートもあり)」のシート内の特定のセル(範囲は固定されてます)の文字列を、全てブックAの1つのシートにまとめたいのですが、VBAにてこれは可能ですか? フォルダ内のファイルが複数だったり、またそのファイル内の該当シートが1つだったり複数だったりで、かなり行き詰ってます。 どなたかご存知の方いらっしゃいましたらご教授願います。 エクセル2000を使用しております。

  • 〔EXCEL VBA〕で「第1のシート」のデータを「第2のシート」に転

    〔EXCEL VBA〕で「第1のシート」のデータを「第2のシート」に転記する方法 EXCEL2003でデータが480行/65列ある第1のシート(データベース的)があります。 第1のシートの列にデータが入力されている場合のみ、第2シートの指定されたセルに検索した列の 表題と検索したデータを結合して転記したいのですが良い方法が分りません。 その際、各行毎に検索し空白列は第2のシ-トに転記せず左詰めにして転記したいのですが・・・・ 初心者に合せたご教示をお願いします。 また、Excel VBAの短期マスター法が御座いましたら合せて教示願います。 以上、宜しくお願い致します。

  • Access VBAからExcelシートの削除

    お世話になります。 Access VBA から指定したExcelシートの削除を行うプログラムを下記の通りに記載しています。 Set oApp = CreateObject("Excel.Application") oApp.Workbooks.Open FileName:="エクセル.xls" oApp.DisplayAlerts = False oApp.Sheets("シート名1").Delete oApp.DisplayAlerts = True この場合において、"シート名1"が存在していれば問題なく処理されますが、 このシートが存在していなければエラーが起きます。 指定したExcelブックにこのシートが存在するかどうかのチェックを事前に行い、 存在する場合のみ削除処理を行うにはどうすればよいでしょうか? よろしくお願いします。 環境は、Access2007です。

  • エクセルVBAで他ブックのセルへジャンプするコード

    お世話になります。アクティブセルから他ブックを開き、元の内容と同じ文字列が含まれるセルにジャンプするVBAのコードを教えていただけないでしょうか。 ・ブック1「12345」のアクティブセルでマクロボタンを押す。 ・指定のブック2シート1を開き、「12345」が含まれるセルを検索しジャンプ(アクティブセル)する。 ・指定の文字列が無い場合は「検索条件に一致するデータは見つかりません。」 ネットなどでいろいろ調べたのですが見つかりませんでした。みなさんご教授お願いいたします。

  • 【EXCEL】VBAでシートのセルを全て選択不可にする

    VBAでエクセルのシート内のセルを全て選択不可にすることは可能でしょうか。 全部で5つくらいのシート内のセルを選択不可にしようと思っています。 選択できるシートも必要なのでブック内のすべてのセルではなくて、シート内のすべてのセルに対して選択不可を行いたいのです。 よろしくお願いします。

  • VBA 別シートのセルから、文字列を参照するには?

    Excel VBAに於いて 同BOOKのSheet1から、Sheet2の文字列を変数に入れよとするとエラーになります。 何故でしょうか。 また、その対処法を、御教示ください。 Dim objWBK As Workbook Dim objSH As Worksheet Set objWBK = ThisWorkbook Set objSH = objWBK.Sheet2 Dim cnsFILENAME As String cnsFILENAME = objSH.Range("a4")     ← ここで、「オブジェクトは、このプロジェクトでサポートされていません。」と、エラーメッセージが出る。 Sheet2.Range(”A4”)には、文字列を入れてある。 以上、よろしくお願いします。

  • 【Excel VBA】串刺し集計について

    Excel VBA初心者です。 串刺し集計について質問させてください。 同じ構成のシートが3つあります。中には数字や文字列が入っています(各シートの同じセルに数字と文字列が入ることは無し)。 串刺しのイメージで数字が入っているセルは合計を、文字列が入っているセルにはどれか1つ(規則もマクロに入れる、例としては○、×、-であれば○など)を合計用の同じセルにいれたいのですが、マクロの組み方をご教授願います。

専門家に質問してみよう