- ベストアンサー
A~B間にある全てのシートを選択する記述を教えてください
VBAの基本がまったくわかっていない初心者です。 マクロで、あるブックの左から3つ目のシートが“A”、末尾が“B”という名前のシートで、そのAからB間のシート全てを選択したいのですが、方法が分かりません。自動記述で選択すると、 Sheets(Array("Sheets1","Sheets2")).Select などとなりますが、シートの数も名前も不定ですので名前では指定できません。 このサイトなどで調べて Sheets(Sheets(3):Sheets.Count).Select などとやってみましたがエラーになります。 丸投げで恐縮ですが、記述のしかたを教えていただけないでしょうか。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
いろいろな記述方法があると思いますが、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
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
下記を参考に 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シートまでのシートを捉えます。 存在・非存在、左右関係などのチェックは省いています。
お礼
もっと簡単に考えていたのですが、(例えばセルの選択A2:C6のように)こんなに記述が必要だとは思っていませんでした。"MsgBox"の部分がよく分かりませんでしたが、皆さんに教えていただいて無事完成しましたのでお礼とさせていただきます。ありがとうございました。
- wangkp
- ベストアンサー率25% (9/35)
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 一点不足なんですけど、削除とき、確認画面が出られます。
お礼
こんなに大変な記述が必要だとは想像していませんでした。ありがとうございました。他の方の回答で短いものがありましたので、そちらを優先させていただきました。ご了承ください。
お礼
もっと簡単に考えていたのですが、(例えばセルの選択A2:C6のように)こんなに記述が必要だとは思っていませんでした。AとBのシートを含むパターンと含まないのと両方お教えいただき、本当にありがとうございました。無事解決いたしました。