エクセルVBAで複数シートを一括で消去する方法

このQ&Aのポイント
  • エクセルVBAのMsgBoxを使用して2つのシート番号で挟まれたシートを一括で消去する方法を教えてください。
  • 現在、複数のシートを指定してDeleteを行うと、シート名を個別に指定する必要があります。しかし、MsgBoxで入力した2つの数字を使用して一括で消す方法があれば教えてください。
  • また、現在の方法ではシートを一枚ずつ消すごとに確認ダイアログが表示され、作業が面倒です。一括で消す方法があれば教えてください。
回答を見る
  • ベストアンサー

エクセルVBA、MsgBOXで入力した2つのシート番号で挟まれたシートをすべて消去したい。

マクロ自動記録で複数シートのDeleteを試してみると、   Sheets(Array("Sh20", "Sh19", "Sh18")).Select   Sheets("Sh18").Activate   ActiveWindow.SelectedSheets.Delete となって、シート名を個別に指定する必要が出てくる。 シートの左から18枚目から20枚目とか、15枚目から40枚目とか MsgBOXで入力した2つの数字で指示したいのですが、良い方法はありませんか? ちなみに、MsgBoxでA=15,B=40を入力して、   mysh = A   For Sh=1 to B-A+1   Sheets(Array(mysh)).Select   ActiveWindow.SelectedSheets.Delete   next とやったら、シート1枚消すごとに、 「データがあります。消してよいですか?」のメッセージが出てきて、 作業が面倒です。 一括して消す方法がないでしょうか?

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>「データがあります。消してよいですか?」のメッセージが出てきて、作業が面倒です。 ここだけなら、 Sub try() Application.DisplayAlerts = False Sheets(1).Delete Application.DisplayAlerts = True End Sub と言う感じにすればメッセージはでないです。

poo777papa
質問者

お礼

見事に解決しました。 一括する方法で悩んでいましたが、 なるほど、スムーズに処理できるようになりました。 ありがとうございました。

関連するQ&A

  • エクセルVBAで全シートをアクティブにするには?

    ブック内の全シートを選択するのはSheets.Selectですね。 そうやって選択した全部のワークシートをアクティブにするにはどう記述するのでしょうか? SelectedSheets.Activateや Sheets.Activateではエラーになってしまいました。 何をしたいかといえば、全シートをアクティブにしてページ設定(横向きに)したいのです。

  • EXCEL VBAでシートを削除したい

    こんにちは。EXCEL VBAのことで質問させていただきます。 マクロでシートを削除しようと思い、 下記のように記述しました。 Sheets(1).Select ActiveWindow.SelectedSheets.Delete しかし、このように記述すると「選択したシートを削除します。~」のようなメッセージが出てきてしまうため、何度もOKボタンを押さなければなりません。これではマクロで自動実行した意味がなくなってしまいます。 このメッセージを回避する方法はないでしょうか。 宜しくお願い致します。

  • エクセルVBA実行後にファイルを自動で閉じるVBA

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルを呼び出し各シートを自動印刷して保存して閉じるVBAです。 質問ですがボタンの配置されたあるエクセルファイルの上記VBAの処理を全て完了した後に上書き保存を自動で実行し、自動であるエクセルファイルを閉じるVBAはどの様に追加すれば良いでしょうか?

  • 指定したシート名以外を非表示にするには?VBA

    エクセルです。 例えば、 A,B,C,Dと言うシートがあり、 A以外を非表示にさせたい場合は、 Sub test() Dim SName As String '表示したいシート名 SName = "A" Sheets(Array("B", "C", "D")).Select ActiveWindow.SelectedSheets.Visible = False End Sub で出来ますが、 SName = "B"の場合など、どのシート名を指定した場合でも その指定したシート名以外のシートを非表示にするVBAコードを教えてくれませんか? しかも、例題でA,B,C,Dとしましたが 実際のシート名は、A会社、B会社、C事業部、D部署・・・等 関連性のないシート名だし、10シート以上あります。 Sheets(Array("B", "C", "D")).Select の部分を,VBAでどううまくやればいいのかわかりません。 SNameで指定したシート名以外をArrayしたいです。 ご回答よろしくお願いします。

  • エクセルVBAで、作業対象を全ワークシートか選択シートかを切り替えたい

    エクセル2000です。 VBAで、作業対象を全部のワークシートか選択されたシートかを任意で切り替えたいのです。 ためしに無理とは思いながら以下のように作ってみましたが、当然のようにエラーになります。 どうかお知恵をお貸しくださいませ。 お願い致します<(_ _)> Sub test() sc = ThisWorkbook.Worksheets.Count ssc = ActiveWindow.SelectedSheets.Count If sc <> ssc Then ans2 = MsgBox(ssc & " 枚のシートだけでいいんですね?" _ & vbCr & "" _ & vbCr & "もし全部のシート(" & sc & "枚)を対象にするなら" _ & vbCr & "いいえを選択してください。", vbYesNo + vbQuestion, " o(^-^)o") ts = IIf(ans = vbNo, Worksheets, ActiveWindow.SelectedSheets)'ここでエラー End If For Each sh In ts sh.Activate sh.Cells(1, 1).Value = sh.Name Next sh End Sub

  • エクセル VBA

    印刷ページを指定して印刷したいのですが 以下の文章だと何処が間違いなのでしょうか。 Windows("あああ.xls").Activate Sheets("かかか").Select Dim c As Integer c = Range("A1").Value Sheets("さささ").Select ActiveWindow.SelectedSheets.PrintOut From:=1, To:=c, Copies:=1, Collate _ 仕事で詰まってしまいました。 自分のPC(エクセル2000)だと動くのですが、 他のPCへメールで飛ばしたら 最後の文章でエラーが出るそうなんですが。

  • エクセルのマクロでのシートの削除について

    エクセルのマクロについて エクセル97でファイルを閉じる前にシートを一つ削除するマクロを流そうとしているのですが、 マクロが流れるとシートを削除するかどうかの確認のダイアログが表示されてしまいます。 この確認のメッセージなしでマクロでシートを削除することは出来ないのでしょうか? ----------------- 実際のプログラム ------------------ Sheets(シート名).Select ActiveWindow.SelectedSheets.Delete わかる方がおられましたら宜しくお願い致します。

  • エクセル VBA 各シートに貼り付け

    いつも皆様には大変お世話になっております。 表題に書いたようにコピーしたものを貼り付けしたいのですがうまく動きません。 Sheets("A").Select Range("B8:B38").Select Selection.Copy For Each sh In Worksheets If sh.Name <> "A" Then Range("B12:B42").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Range("F38").Select ActiveWindow.SmallScroll Down:=-12 End If Next と言った様な構文を書いているのですが Aのファイル内のみでコピーして貼り付けをやってしまいます。 ちなみにシートはB,C,Dなど各種あります。 よろしくお願いいたします。

  • 全てのワークシートのレイアウト変更について

    いくつも全く同じレイアウトのエクセルシートがあります。この全てのシートのレイアウトをいっぺんに全く同様なレイアウト変更(ある場所のセル内容を別の場所にカット&ペーストで移したい)したいのですが、マクロでどう書けばいいかお教え下さい。シート名を一つ一つ指定するやり方では実行できましたが、問題は一つのファイルのワークシートの数は毎回変更されるところです。因みにワークシート名(タブの部分)のネーミングルールは同じです(Plan(1), Plan(2)....Plan(n)となります)。以下に一つ一つ指定した場合のマクロを載せます。宜しくお願いいたします。 Sheets("PLAN(1)").Activate Rows("29:31").Select Selection.Delete Shift:=xlUp ActiveWindow.LargeScroll ToRight:=-1 Range("j3:q28").Select Selection.Cut Range("a29").Select ActiveSheet.Paste Range("Q23").Select Sheets("PLAN(2)").Activate Rows("29:31").Select Selection.Delete Shift:=xlUp ActiveWindow.LargeScroll ToRight:=-1 Range("j3:q28").Select Selection.Cut Range("a29").Select ActiveSheet.Paste Range("Q23").Select 以下、同様です。

  • ワークシート上で印刷設定をしたい。

    印刷の設定をワークシート上で行うようにしたいのですが、 やり方を教えてください。 下の場合、 [シート]Sheet1、Sheet2 [枚数]2 ですが、ワークシートに例えば B2から下(つまりB3、B4・・・)にシート名、 A2から下(つまりA3・A4・・・)に「印刷」とあれば、B列のシート名のを 印刷対象にする。 C2から下(つまりC3、C4・・・)にそれぞれのシートの枚数を指定して 下記のようなコードにして印刷するようにしたいと思っています。 下の場合Array("Sheet1", "Sheet3")となっていますが、場合によってはシートは1枚かもしれません。こういった具合ですが、どのような コードにすればよいでしょうか?よろしくお願いします。 Sub insatsu() Sheets(Array("Sheet1", "Sheet3")).Select Sheets("Sheet1").Activate ActiveWindow.SelectedSheets.PrintOut Copies:=2, Collate:=True End Sub

専門家に質問してみよう