• ベストアンサー

VBAで指定したSheetの削除

お世話になります 指定したシート以外すべてのシートを削除させるボタンを作成したいのですが ↓こんなものを見つけました。(URLわからくなってしまった;;) これは図1~ワークシートを削除させるVBAらしいのですが ■解らないこと なぜかsheetにすると削除してくれません。 '指定以外ワークシート削除 Private Sub CommandButton1_Click() Dim myShe As Worksheet For Each myShe In Worksheets If myShe.Name <> Worksheets("図").Name Then myShe.Visible = Delete End If Next End Sub

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

  • ベストアンサー
  • pulsa
  • ベストアンサー率57% (34/59)
回答No.4

横からすいません たぶんここですね For Each myShe In Worksheets コレを For Each myShe In Sheets にします あと If myShe.Name <> Worksheets("図").Name Then myShe.Visible = Delete は If myShe.Name <> "図" Then myShe.Delete に変えればOKと思います 続けると For Each myShe In Sheets If myShe.Name <> "図" Then myShe.Delete ・・・ なんでSheetsじゃなきゃならないのかは、調べてませんが、For Eachでシート名を取るとき、上手く行かない時があるから使わないって割り切りで良いと思います http://oshiete1.goo.ne.jp/qa3308068.html おまけ 削除するシート名がわかるのであれば Sheets("Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6").Delete なんてのもあります まぁただのおまけですが…^^;

その他の回答 (3)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

#2です。 貼り付けが上手くいきませんでした。 こちらでためしてください。 Private Sub CommandButton1_Click() Dim myShe As Worksheet For Each myShe In Worksheets If myShe.Name Like "*Sheet*" Then 'Sheet名にSheetを含めば Application.DisplayAlerts = False '警告を止める myShe.Delete '削除 Application.DisplayAlerts = True '警告を元に戻す End If Next End Sub

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> Sheetとつけられた名前を削除させたいのですが > たとえば > ■削除できるもの > Sheet1,Sheet2,Sheet3,Sheet4,Sheet5,Sheet6 > ■できないもの >Sheet以外のもの Sheetの名前に「Sheet」という言葉を含んでいれば削除するのですね? ならば以下をお試しください。 Private Sub CommandButton1_Click() Dim myShe As Worksheet For Each myShe In Worksheets If myShe.Name Like "*Sheet*" Then 'Sheet名にSheetを含めば Application.DisplayAlerts = False '警告を止める myShe.Delete '削除 Application.DisplayAlerts = True '警告を元に戻すNext End If End Sub

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>myShe.Visible = Delete Visible はシート表示の設定なので、DELETE を設定する事はできません。 下記のようにします。 Application.DisplayAlerts = False myShe.Delete Application.DisplayAlerts = True

P3mania
質問者

補足

お返事ありがとうございます Sheetとつけられた名前を削除させたいのですが たとえば ■削除できるもの Sheet1,Sheet2,Sheet3,Sheet4,Sheet5,Sheet6 ■できないもの Sheet以外のもの できないのであれば、逆に指定しているシート以外削除できないですか? 指定シートは4シートぐらいあります End Sub

関連するQ&A

  • EXCEL VBAにてのワークシート作成

    エクセルのVBAにてワークシートを作成することで困っています。 自分で書き込んだのは Private Sub CommandButton1_Click() Worksheets("原紙").Copy ActiveSheet.Name = TextBox1 Worksheets.Add After:=Worksheets(2) End Sub Private Sub UserForm_Initialize() TextBox1 = Format(Date, "yy.mm.dd") End Sub 実行したいことはCommandButton1クリック時に 左から2番目にあるワークシート 原紙を テキストボックス1に入力されている(日付) 名前を付けて左から3番目に新規で作成したいのですが 思うように動かずエラーが出てしまいます。 どの様に修正すれば宜しいでしょうか? またクリック時にすでにテキストボックス1と同じ 名前のワークシートが存在した場合はそのワークシートを Activeにしたいのですがどの様に書き込めば宜しいでしょうか? 重ね重ねですが宜しくお願いいたします。

  • マクロ 特定のシート以外を削除する

    いつも回答して頂きありがとうございます。 特定のシート以外を削除するマクロを作成して動作させたのですが、削除する時に『選択したシートにデータが存在する可能性が・・・』と聞いてきます。これを無視して削除を行わせたいのですがどうすればよろしいでしょうか?御指導の程宜しくお願い致します。 Sub シートの削除() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "データ元" And ws.Name <> "集計用" Then ws.Delete End If Next End Sub

  • 指定したシートに入力する。

    よろしくお願いします。 ユーザーフォームのテキストボックスのデータをコマンドボタンをクリックしたときに 指定シート(AAA)の最終行+1(C)に入力する。 Private Sub CommandButton5_Click() With Worksheets("AAA") .Range("C65536").End(xlUp).Row 1 = TextBox4 End With End Sub と、したのですが、シート(AAA)に入力されません。 よろしくご教示お願いします。

  • VBAの書き方を教えてください 2

    以前にこちらで質問をさせて頂き、(http://okwave.jp/qa/q8451754.html)これに、VBAを追記していきたいのですが、移動したシートがアクティブする方法がわかりません。 移動したシートのA1000をアクティブにする場合、教えて頂いたVBAにどこに何を入れれば宜しいのでしょうか? よろしくお願いします。 Private Sub CommandButton1_Click() Dim k As Long, myFlg As Boolean For k = 1 To Worksheets.Count If Worksheets(k).Name = Range("A1") Then myFlg = True Exit For End If Next k If myFlg = True Then Worksheets(k).Activate Else MsgBox "該当シートなし" End If End Sub

  • Excel VBAでのシートの削除について

    Excel VBAで、シート上に配置されたボタンをクリックすることで、メッセージを出さずにそのシートの削除をしたいと思っています。 サンプルとして、シート上(例えばSheet1)にボタンを1個配置し、 ------------------------------------------------------- Private Sub CommandButton1_Click() Application.DisplayAlerts = False Delete Application.DisplayAlerts = True End Sub ------------------------------------------------------- のようにすると、オートメーションエラーが起きます。 そこで、 Application.DisplayAlerts = True をコメントアウトしてやれば実行はできるのですが、その後別のシートで処理を行う場合には、再度メッセージを表示してほしいと思っています。 ためしに、Sheet1削除後にアクティブになるSheet2に次のようなコードを記述しました。Sheet1同様、シート上にボタンを1個配置しています。 ------------------------------------------------------- Private Sub CommandButton1_Click() MsgBox Application.DisplayAlerts End Sub Private Sub Worksheet_Activate() MsgBox "次に出るメッセージはアクティブ直後のDisplayAlerts設定。" MsgBox Application.DisplayAlerts Application.DisplayAlerts = True MsgBox "次に出るメッセージは変更後のDisplayAlerts設定。" MsgBox Application.DisplayAlerts End Sub ------------------------------------------------------- こうすれば、Sheet1削除後、アクティブになった直後はDisplayAlertsがFalse。その後設定変更してTrueになるかとおもったのですが、結果はFalseでした。しかしその後、ボタンをクリックするとTrueが返ってきました。 いろいろ調べましたが、なぜこのような結果になるのかわかりません。よろしくお願いいたします。

  • VBAでワークシートを変数にするとき

    たとえばSheet1とSheet2を一度に選択する場合、 Sub Macro6() Sheets(Array("Sheet1", "Sheet2")).Select End Sub と書くと思います。 ワークシートを変数で書く場合は Sub test() Dim ws1 As Worksheet, ws2 As Worksheet Sheets(Array(ws1.Name, ws2.Name)).Select End Sub と、いちいち名前で指定しなければならないのでしょうか? それとももっと別の書き方があるのでしょうか?

  • 以下のコードですと、アクティブシート以外全て隠してしまいますが、

    以下のコードですと、アクティブシート以外全て隠してしまいますが、 選択(複数)されているシート以外を非表示にするにはどのように書き換えたら良いでしょうか。 Sub Test() Dim mstr as String Dim i as Integer mstr = ActiveSheet.Name For i = 1 To Worksheets.Count If Worksheets(i).Visible = True And Worksheets(i).Name <> str(0) Then Worksheets(i).Visible = xlVeryHidden End If Next i End Sub よろしくお願いします。

  • Excelマクロにてシートの削除を行いたいです。

    初めて投稿させて頂きます。 質問内容  Excelのマクロを使用して指定シート以外のシートの削除を行いたいです。 前条件  外部CSVファイルを取込み、データによってシートを追加して振り分けています。  再度マクロを実行した場合特定のシートを残し(フォーマット等)、他のシートを削除してからデータの振り分けを実施する予定です。 やってみた事  下記の様に書いて実施してみたのですがエラーとなってしまいます。 Sub Clear()   Application.DisplayAlerts = False   For I = 1 To Worksheets.Count     If (Worksheets(I).Name <> "sheet") Then       Sheets(Worksheets(I).Name).Select       ActiveWindow.SelectedSheets.Delete     End If   Next I   Application.DisplayAlerts = True End Sub 上記の書き方だと1シート毎削除なので、選択したシートを一括で削除出来るとうれしいです。 どなたかご存知の方お願いします。

  • エクセルVBAでワークシート削除

    ブックの中にある、表示されているシートで、たとえば図表1~図表4(何番まであるかは不定です)という名前のシートを削除するVBAを作りました。ただの「図表」という名前のシートや、「何々図表」、「図表集計」等のシートは削除しません。 Sub 保存図表削除() Dim SN As String For Each sh In Worksheets SN = sh.Name If sh.Visible And IsNumeric(Mid(SN, 3, Len(SN) - 2)) And Left(SN, 2) = "図表" Then ans = MsgBox(SN & "を削除してよい?", vbYesNo) If ans = vbYes Then Application.DisplayAlerts = False sh.Delete Application.DisplayAlerts = True End If End If Next End Sub これでうまく作動するのですが、いちいちシートごとに削除の有無を聞かずに、削除するシート名をまとめて表示し、それらを削除するかしないかを聞くにはどうすればよいでしょうか? 「図表1,2,3,4があります。これらを削除しますか?」というような感じです。

  • Excel VBA シート削除の繰り返しにおいて

    EXCEL 2002 シート削除の連続削除において分からない事があるので質問いたします。あるシートのボタンを押すと、そのシートの種族と同じ種族で、種族の子番号が、そのシートよりも大きいものを削除したいと思います。 シート番号 1 スタートページ シート番号 2 種族 1 (textbox1).value 子番号 1 (textbox2).value シート番号 3 種族 2 (textbox1).value 子番号 1 (textbox2).value シート番号 4 種族 2 (textbox1).value 子番号 2 (textbox2).value ← 削除ボタンを押したシート(削除したい) シート番号 5 種族 2 (textbox1).value 子番号 3 (textbox2).value ←削除したい シート番号 6 種族 3 (textbox1).value 子番号 1 (textbox2).value ←削除したくない シートに削除機能を設けると、オートメーションエラーがでてくるので、オートメーションエラーがでないように、標準モジュールに削除プロシージャを作成して、そのプロシージャを呼び出す形をとっています。また、よけいな、注意書き等(削除の時必ずでてきて、連続操作をとめる警告文を防ぐために、 Application.DisplayAlerts = False )を 呼び出すシートモジュールと、呼び出されたモジュールの両方で、設けております。 下記のようにいたしましたが、「オートメーションエラー」のメッセージがでてきて、デバッグ前に実行時のエラーで終わります。 上記の目的を達成するために、オートメーションエラーを表示させずに、無事連続シート削除を達成するにはどうすればよろしいでしょうか。どなたか連続削除の経験等ある方いらっしゃいましたら、お願いいたします。 呼び出すシート側のプロシージャ Private Sub deletebutton_Click() Call delete '削除関数 Application.DisplayAlerts = True End Sub 呼び出された標準モジュール Option Explicit Const worksheets_start As Integer = 2 '削除可能シート番号 (2から削除可能 ' 削除プロシージャ Public Sub delete() Dim no, i, j As Integer Dim ws As Worksheet Application.DisplayAlerts = False ‘余計な警告文をださない。 MsgBox "シートNOを削除いたします。", vbOKCancel If Worksheets.Count < worksheets_start Then ‘シート2以下は削除させない(今回は4から削除 MsgBox "これ以上、削除できるシート番号がありません。" GoTo sayonara Else no = ActiveSheet.Index '削除を指定したページのページ番号取得 i = Worksheets.Count ‘シートの総シート数取得 For j = worksheet_start To Worksheets.Count ‘共通変数のシートスタート( 2 ) '種族2の子番号2以上のシートがあれば、全て削除したい Worksheets(i).Activate   '最終ページにアクティブを移動 If i = worksheets_start Then ' 最終シートからチェック i カウントがスタートページまでいったら終了 Exit For End If If no <> i Then ‘ 削除ボタンを押したシートは念の為消さない If Val(Worksheets(i).TextBox4.Value) = _ Val(Worksheets(no).TextBox4.Value) Then '種族が同じ(同種族) If Val(Worksheets(i).TextBox5.Value) > _ Val(Worksheets(no).TextBox5.Value) Then '同種族の子番号が削除指定したシートの子番号よりも大きい Worksheets(i).delete ‘ 該当シート削除 MsgBox "削除" & I ‘ シートiの削除メッセージ i = i - 1 ‘ シート削除対象を一つ減らす  Else ‘ 子番号が削除ボタンを押したシートの子番号より小さい i = i - 1        End If End If End If Next End If sayonara: Application.DisplayAlerts = True End Sub 参照ページ http://www.big.or.jp/~seto/vbaref/vbaref7.htm​ http://www.relief.jp/itnote/archives/001936.php​ http://oshiete1.goo.ne.jp/qa2782689.html​ みにくくて申し訳ありません。

専門家に質問してみよう