hatokamome

hatokamomeの趣味・雑記録

VBAでシートのリンク付きの目次を作る

Excelのワークシートに便利な目次シートを作成する方法を共有します。目次シートには各シートへのハイパーリンクが追加され、シート間のナビゲーションが簡単に行えます。

以下の手順でVBAコードを使用して目次シートを作成します。

  1. Excelを開き、目次を作成したいワークブックを開きます。

  2. VBE(Visual Basic for Applicationsエディタ)を開きます。キーボードの「Alt」キーと「F11」キーを同時に押すか、Excelのリボンの「開発」タブを選択し、「Visual Basic」ボタンをクリックします。※「開発」タブが表示されていない場合は、ファイル > オプション > カスタマイズリボンで「開発」にチェックを入れてください。

  3. VBEが開かれたら、左上の「挿入」メニューをクリックし、「モジュール」を選択して新しいモジュールを作成します。

  4. 新しいモジュールが開かれたら、上記のVBAコードをコピーし、モジュール内に貼り付けます。

  5. VBEのメニューから「ファイル」>「閉じて戻る」をクリックして、VBEを閉じます。

  6. Excelに戻り、開発タブの「マクロ」ボタンをクリックします。マクロの一覧に「View_目次作成M」が表示されるはずです。

  7. 「View_目次作成M」を選択し、「実行」ボタンをクリックします。これにより、VBAが実行され、目次シートが作成されます。

以上の手順で、VBAを使用してExcelの目次シートを作成できます。目次シートには各シートへのハイパーリンクが追加され、シート間のナビゲーションが容易になります。作業効率が向上し、非常に便利です。処理速度の改善点があれば、ご意見をいただけると幸いです。みなさんでより良い目次シート作成方法を共有しましょう!

ソースコード:

' 拡大率の定数
Const magnification = 75

' 目次シートを作成するサブプロシージャ
Sub View_目次作成M()
    ' 変数の宣言
    Dim sheetCount As Integer
    Dim worksheetName As String
    Dim Worksheet As Worksheet
    Dim col_num As Integer
    col_num = 1
    Dim j As Integer
    row_num = 1
    
    ' INDEXシートが存在した場合は削除
    If ExistsWorksheet("INDEX") Then
        Worksheets("INDEX").Select
        Application.DisplayAlerts = False
        ActiveSheet.Delete
        Application.DisplayAlerts = True
    End If

    ' 新しいシートを追加し、名前を"INDEX"に設定
    Worksheets.Add
    ActiveSheet.name = "INDEX"

    ' アプリケーションの設定を一時的に無効にする
    accelerate
    
    ' 各シートに対して目次を作成
    For i = 1 To Worksheets.count
    
        worksheetName = Worksheets(i).name
        
        If Mid(worksheetName, 1, 1) = "【" Or Mid(worksheetName, 1, 1) = "★" Then
            row_num = 1
            col_num = col_num + 1
        End If
       
        ' ハイパーリンクの作成
        Dim subAddress_ As String
        subAddress_ = "'" & worksheetName & "'" & "!" & Worksheets(i).Cells(1, 1).Address
        
        ' セルをアクティブにし、ハイパーリンクを追加
        Worksheets("INDEX").Cells(row_num, col_num).Activate
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=ActiveWorkbook.FullName, SubAddress:=subAddress_
        ActiveCell.Value = worksheetName
        Cells(row_num, col_num) = Worksheets(i).name
        Cells(row_num, col_num).Interior.colorIndex = Worksheets(i).Tab.colorIndex
        Cells(row_num, col_num).EntireColumn.ColumnWidth = 30
               
        row_num = row_num + 1

    Next i
    
    ' アプリケーションの設定を元に戻す
    clearAccelerate
     
    ' 列幅の調整
    Columns("B:BB").ColumnWidth = 10
    Columns("A:A").EntireColumn.AutoFit
    Cells.EntireColumn.AutoFit
    Cells(1, 1).Select
    
    ' フリーズパンを設定
    FreezePanes

    File_time_series_
 
    ' ズームの設定
    For i = 1 To Worksheets.count
        Worksheets(i).Select
        ActiveWindow.zoom = magnification
    Next i
    
    Worksheets(1).Select
    
End Sub

' セルをフリーズパンするサブプロシージャ
Sub FreezePanes()
    With ActiveWindow
        .SplitColumn = 0
        .SplitRow = 1
    End With
    ActiveWindow.FreezePanes = True
End Sub

' シートが存在するかどうかを判断する関数
Function ExistsWorksheet(ByVal name As String)
    Dim ws As Worksheet
    For Each ws In sheets
        If ws.name = name Then
            ExistsWorksheet = True
            Exit Function
        End If
    Next
    ExistsWorksheet = False
End Function

' アプリケーションの設定を一時的に無効にするサブプロシージャ
Sub accelerate()
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
    End With
End Sub

' アプリケーションの設定を元に戻すサブプロシージャ
Sub clearAccelerate()
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
    End With
End Sub

ExcelVBA[完全]入門

ExcelVBA[完全]入門

Amazon