指定のシートが何番目のシートか調べる方法を解説します。
ワークシートのIndex番号を取得する
例えばActiveSheetが何番目のシートかを調べる場合は、
以下のコードを実行します。
MsgBox ActiveSheet.Index
とても簡単なコードですね。
あるWorksheetがブック内で何番目のシートなのかは、
Indexプロパティの値で調べることができます。
Worksheetに限らず、○○.IndexでIndex番号を調べられるものは多いです。
覚えておきましょう。
ちなみに「シートが何番目か調べたい」と思った方は、
「Worksheets(x)のxに入れる数字を調べたい」という方が多いでしょうか?
その目的もこのIndexプロパティで達成することができ、例えば、
Sheets(ActiveSheet.index)
このコードはActiveSheetを素直に取得できます。
ちなみに、
Worksheets(ActiveSheet.index)
は、ActiveSheetを指すとは限らない点にご注意ください。
IndexプロパティはSheets(x)のxを求めるプロパティで、
マクロシートやグラフシートも含めた全シートで何番目かを返します。
Worksheets(ActiveSheet.index)と書いた場合は、マクロシートやグラフシートがあるとその分だけ左右にズレますのでお気を付けください。
(Worksheetだけでブックが構成されている場合は問題ありません)
グラフシートやマクロシートがあるブックにおいて、
Worksheets(x)のxを一発で調べるプロパティは、私の知る限りはありません。
親ブックの全シートをFor文で回して、頑張って取得しましょう。
Function GetWorksheetIndex(指定シート As Worksheet) As Long With 指定シート.Parent Dim i As Long For i = 1 To .Worksheets.Count If .Worksheets(i) Is 指定シート Then GetWorksheetIndex = i Exit Function End If Next End With End Function
隣のシートを取得する
さて重ねて推測しますと、
「Worksheets(x)のxに入れる数字を調べたい」と思った方は、
「あるシートの隣のシートを取得したい」という方も多いでしょうか?
その目論見通り、隣のシートは、今回のIndexプロパティで、
Set 左隣のシート = Worksheets(指定シート.Index - 1) Set 右隣のシート = Worksheets(指定シート.Index + 1)
このように取得することができます。
もちろんこの書き方でもよいのですが、実はWorksheetオブジェクトには、
「隣のシートを取得するプロパティ」が用意されています。
Set 左隣のシート = 指定シート.Previous Set 右隣のシート = 指定シート.Next
このように、Worksheetオブジェクトには、左右(前後)のシートを取得するNext/Previousプロパティが用意されています。
Indexプロパティはいろいろな場所で出てきて知識の価値が高いので、
Indexを覚えてそれを使ってもいいと思いますが、
知っていればNext/Previousプロパティの方が早く書けます。
気が向いたら覚えてあげてください。
なお、例によってこれらの指定は「グラフシート」があるとうまく動きません。
グラフシートを挟んで右隣のシートを取得するのはそもそも危険な気がしますが、
取得したい場合は上記で作った関数でも使って、
Set 右隣のワークシート = Worksheets(GetWorksheetIndex(指定シート) + 1)
このように取得してください。
おまけ:ブックが何番目のブックか調べる
さきほど「Worksheetに限らず、○○.IndexでIndex番号を調べられるものは多いです。覚えておきましょう。」と書いていました。
早速類似の問題「指定ブックが何番目のブックか」を調べてみましょう。
ないんかい(笑)
なぜかWorkbookにはIndexプロパティが用意されていません。
よって、次のブック、前のブックなどを取得したい場合は、
For文で頑張って探すしかないようです。
Function GetWorkbookIndex(指定ブック As Workbook) As Long Dim i As Long For i = 1 To Workbooks.Count If 指定ブック Is Workbooks(i) Then GetWorkbookIndex = i Exit Function End If Next End Function Function GetNextWorkbook(指定ブック As Workbook) As Workbook Set GetNextWorkbook = Workbooks(GetWorkbookIndex(指定ブック) + 1) End Function Function GetPrevWorkbook(指定ブック As Workbook) As Workbook Set GetPrevWorkbook = Workbooks(GetWorkbookIndex(指定ブック) - 1) End Function
まあシートと違って、ブックのIndexが欲しいなんて場面はそうそうないですけどね。
ブックにおける「前」「次」は安定しない(必ずしも開いた順番とは限らない)ため、
これを頼ってマクロを書くのはおすすめしません。
ご利用は計画的に。