こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAで複数シート選択

エクセルVBAで複数のシートを選択する場合、
Sheets(Array("AAA", "BBB", "CCC")).Select 
と書くと思いますが、マクロを回してみないことにはシート名や枚数が特定できない場合、どのように記述したらいいのでしょうか?
たとえば、新たに追加されたSheets(n)~Sheets(n+x)を選択するような場合です。
よろしくお願いします。

投稿日時 - 2006-06-10 00:43:09

QNo.2206228

困ってます

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

#2です。#2のお礼に関して、
Sub test01()
n = 2
m = 3
Sheets(n).Select
For i = n + 1 To n + m - 1
Sheets(i).Select False
Next i
End Sub
でどうですか。

投稿日時 - 2006-06-10 16:01:46

お礼

imogasiさん、いつもありがとうございます。
Sheets(i).Select Falseで、順次セレクトできるんですね!
これならわざわざシート名を配列に入れていかなくても、都度選択していけばいいということがわかりました。
ありがとうございました。

投稿日時 - 2006-06-10 22:01:42

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

Sub test01()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
MsgBox sh.Name
' 処理
Next
End Sub
でどうですか。
問題にしているある1つのシートは、処理を除外する場合がありますが、If文でシート名を
判別して、スキップしてください。

投稿日時 - 2006-06-10 14:24:28

お礼

ありがとうございます。
For Nextは一番最初に考えたのですが、Sheets(n)~Sheets(n+x)に該当する場合、すべて選択するという処理の書き方が分からないのです。
よろしかったらご教示お願いできませんでしょうか?

投稿日時 - 2006-06-10 14:53:24

ANo.1

> 新たに追加されたSheets(n)~Sheets(n+x)を選択するような場合です。

要は、シート名の配列を渡せば良いわけで。
サンプルです。
Sub Test1()
Dim sh() As String
Dim i, n, x
n = 5
x = 2
ReDim sh(n To n + x)
For i = LBound(sh) To UBound(sh)
sh(i) = Sheets(i).Name
Next
Sheets(sh).Select
End Sub

投稿日時 - 2006-06-10 02:12:29

お礼

ありがとうございます。
ReDim?また新たな疑問が湧いてきましたが、なんとか追加されたシートインデックスを(n To n + x)にいれて目的を達することができました。

投稿日時 - 2006-06-10 14:50:13

あなたにオススメの質問