• ベストアンサー

A~B間にある全てのシートを選択する記述を教えてください

VBAの基本がまったくわかっていない初心者です。 マクロで、あるブックの左から3つ目のシートが“A”、末尾が“B”という名前のシートで、そのAからB間のシート全てを選択したいのですが、方法が分かりません。自動記述で選択すると、 Sheets(Array("Sheets1","Sheets2")).Select などとなりますが、シートの数も名前も不定ですので名前では指定できません。 このサイトなどで調べて Sheets(Sheets(3):Sheets.Count).Select などとやってみましたがエラーになります。 丸投げで恐縮ですが、記述のしかたを教えていただけないでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
回答No.2

いろいろな記述方法があると思いますが、Aは必ずBより前にある 条件での例です。 AとBを含む場合。 Sub Test1()  Dim i  Sheets("A").Select  For i = Sheets("A").Index + 1 To Sheets.Count   Sheets(i).Select False   If Sheets(i).Name = "B" Then Exit Sub  Next End Sub AとBを含まない場合。 Sub Test2()  Dim i  If Sheets(Sheets("A").Index + 1).Name <> "B" Then   Sheets(Sheets("A").Index + 1).Select  End If  For i = Sheets("A").Index + 1 To Sheets.Count   If Sheets(i).Name = "B" Then Exit Sub  Sheets(i).Select False  Next End Sub

suikaman
質問者

お礼

もっと簡単に考えていたのですが、(例えばセルの選択A2:C6のように)こんなに記述が必要だとは思っていませんでした。AとBのシートを含むパターンと含まないのと両方お教えいただき、本当にありがとうございました。無事解決いたしました。

その他の回答 (2)

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

下記を参考に Sub test01() Dim sh As Worksheet For Each sh In ActiveWindow.SelectedSheets MsgBox sh.Name Next End Sub ーー Sub test02() x = Sheets("aaa").Index y = Sheets("cccc").Index For i = x To y MsgBox Sheets(i).Name Next i End Sub ーー test01はシート名は表面に出ず、事実上Shhets("A")とSheets("B") そ作業グループに指定する場合 test02は aaa シートから ccccシートまでのシートを捉えます。 存在・非存在、左右関係などのチェックは省いています。

suikaman
質問者

お礼

もっと簡単に考えていたのですが、(例えばセルの選択A2:C6のように)こんなに記述が必要だとは思っていませんでした。"MsgBox"の部分がよく分かりませんでしたが、皆さんに教えていただいて無事完成しましたのでお礼とさせていただきます。ありがとうございました。

  • wangkp
  • ベストアンサー率25% (9/35)
回答No.1

Dim sl() As String Dim pos As Integer Dim iStart As Integer iStart = 9999 pos = 0 For i = 1 To Sheets.Count If Sheets(i).Name = "A" Then iStart = i End If If Sheets(i).Name = "B" Then sl(pos) = Sheets(i).Name Exit For End If If (i >= iStart) Then ReDim Preserve sl(pos + 1) sl(pos) = Sheets(i).Name pos = pos + 1 End If Next Sheets(sl).Select ActiveWindow.SelectedSheets.Delete End Sub 一点不足なんですけど、削除とき、確認画面が出られます。

suikaman
質問者

お礼

こんなに大変な記述が必要だとは想像していませんでした。ありがとうございました。他の方の回答で短いものがありましたので、そちらを優先させていただきました。ご了承ください。

関連するQ&A

専門家に質問してみよう