ExcelVBA(マクロ)でワークシートの目次を作る方法/HyperLinks.addメソッドの使い方

parrot IT

シートを増やして色々な情報を作っていく場合、これを自由に移動できる目次があると便利かなと思い作ってみました。アレなら最後のコードコピペしても動きます。
ハイパーリンクを作成するHyperLinks.addメソッドを使用します。

Advertisements

目次の作り方

目次1
たくさんシートがあるので、楽に移動するための目次を作りたいと思います。
目次2
今シートがいくつあるかは、WorkSheetsオブジェクトのCountプロパティで取得可能です。
目次3
これをFor Nextの最大値に使用し、WorkSheetsオブジェクトのNameプロパティを順番に出力して、シートの一覧を作ります。
目次4
もし目次シートはいらないのであればiを2からスタートし、Cellsの左をすべて-1すればOKです。
目次6
で、HyperLinks.Addメソッドを使用して、これらにリンクを設定します。
ハイパーリンクの設定
Hyperlinks.Add
※引数Anchor、Addressは必須
目次7
ActiveSheets=現在いるシートに対して処理を実行します。
目次8
Anchorはどのセルに対してリンクを設定するかなので、シートの名前を取得した時に一緒に同じセルに設定すればOKです。よってCellsで同様に指定します。
目次9
AddressとSubAddressはどちらもリンク先ですが、Addressのほうはブック(ファイル)の指定をするための引数なので、これは同じブック内で移動するのであれば空欄でOKです。ThisWorkbook.FullNameのように指定することもできます。
目次10
SubAddressで取得したシート名の後ろに「!A1」を付けて、行き先を設定します。
目次11
このコードを実行した後、任意のシート名を押すと、
目次12
そのシートに移動することができます。

このコードはActiveSheetに対して動作するので、Sheet2でも3でも同様に目次を作成することができます(ただしA列にデータがあったら上書きされます)。

' vba
Dim i As Integer
Dim wkshtcount As Integer
wkshtcount = Worksheets.Count ' シートの数
For i = 1 To wkshtcount
Cells(i, 1).Value = Worksheets(i).Name ' シートの名前を入力
' ハイパーリンクを設定
ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), _
Address:="", SubAddress:=Cells(i, 1).Value & "!A1"
Next

コメント