和風スパゲティのレシピ

日本語でコーディングするExcelVBA

隣のシート(前のシートや次のシート)を取得する

あるシートを変数などで持っているときに、
そのシートの隣(前後)のシートを取得する方法を紹介します。

Previous・Nextプロパティを使う

Worksheetオブジェクトには、隣(前後)のシートを一発で取得するプロパティが用意されています。

Set 左隣のシート = 指定シート.Previous
Set 右隣のシート = 指定シート.Next

このように、「Previous/Nextプロパティ」を使うことで、前後のシートを取得することができます。


隣のシートがない場合は、Nothingを返します。

If 指定シート.Next Is Nothing Then
    MsgBox("指定シートは右端のシートです。")
End If

 

Indexプロパティを使う

一発解答のPrevious/Nextプロパティを知っていればこちらの方法は不要かもしれませんが、Indexプロパティを使って取得することもできます。

Set 左隣のシート = Worksheets(指定シート.Index -1)
Set 右隣のシート = Worksheets(指定シート.Index + 1)

「ワークシート.Index」で、そのシートのIndex番号を調べることができます。

それを「+1」または「-1」してからWorksheetsに渡し直せば、
前後のシートを取得することができます。


Worksheetに限らず、○○.IndexでIndex番号を調べられるものは多いです。

調べたIndex番号を加減算して、コレクションのItemを指定する方法はたまに出てきますので、こちらも覚えておきましょう。


なお、分かりやすい様に親のブックを省略しましたが、
複数のブックを扱うマクロの場合は、

Set 左隣のシート = 指定シート.Parent.Worksheets(指定シート.Index -1)
Set 右隣のシート = 指定シート.Parent.Worksheets(指定シート.Index + 1)

と、渡すシートの親ブックをしっかりと指定する必要があることにご注意ください。


また、サンプルではWorksheetsを用いましたが、
Indexプロパティは正確にはSheetsのインデックス番号を返すプロパティです。

グラフシートなど、ワークシート以外のシートがあるブックでは、
それらのシートの数だけ指定がズレますのでご注意ください。

詳しくはこちらの記事をどうぞ。
www.limecode.jp