非プログラマーでもできる!業務の自動化

PowerPointの表にリンクを追加するVBAマクロの作成

当ページのリンクの一部に広告が含まれています。

課題・悩み「PowerPointのスライドにリンクを作成するのを自動化したい」

解決策「PowerPointのスライド内の表に各スライドへのリンクを作成するVBAマクロ」を解説

プレゼンテーション資料を作成する際、PowerPoint内の特定のスライドや情報へ素早くナビゲートするためにリンクを設定することがあります。

特に目次のスライドに各スライドへのリンクがあると便利。

この記事では、ExcelのVBAを使用して、PowerPointの特定のスライドにある表の特定の列にリンクを自動で追加する方法について解説します。

この記事では

【PowerPointのスライド内の表に各スライドへのリンクを作成するVBAマクロ】を図解で解説しています。

VBAマクロファイルを配布中。

以下のボタンよりダウンロードしてください。

目次

このコードは、ExcelのVBAを使ってPowerPointの特定のスライドにある表にリンクを追加するマクロです。

Option Explicit

Sub AddLinksToPowerPoint()
    ' PowerPointとの連携用オブジェクトを宣言
    Dim pptApp As Object
    Dim pptPres As Object
    Dim pptSlide As Object
    Dim pptShape As Object
    Dim pptTable As Object
    Dim slideIndex As Integer, tableIndex As Integer, columnIndex As Integer
    Dim linkCount As Integer, startSlideIndex As Integer, i As Integer
    Dim pptPath As String, linkAddress As String
    
    On Error GoTo ErrorHandler ' エラーハンドリングの開始
    
    ' Excelシートからパラメータを読み込む
    With ThisWorkbook.Sheets("Sheet1")
        pptPath = .Range("C2").Value
        slideIndex = .Range("C3").Value
        tableIndex = Val(.Range("C4").Value)
        columnIndex = .Range("C5").Value
        linkCount = .Range("C6").Value
        startSlideIndex = .Range("C7").Value
    End With
    
    ' PowerPointアプリケーションを開く
    Set pptApp = CreateObject("PowerPoint.Application")
    pptApp.Visible = True
    
    ' 指定されたプレゼンテーションを開く
    Set pptPres = pptApp.Presentations.Open(pptPath)
    
    ' 指定されたスライドと表を取得
    Set pptSlide = pptPres.Slides(slideIndex)
    For Each pptShape In pptSlide.Shapes
        If pptShape.HasTable Then
            tableIndex = tableIndex - 1
            If tableIndex = 0 Then Set pptTable = pptShape.Table: Exit For
        End If
    Next
    
    If pptTable Is Nothing Then Err.Raise Number:=vbObjectError + 513, Description:="指定された表が見つかりません。"
    
    ' 指定された列にリンクを追加
    For i = 1 To linkCount
        linkAddress = "#" & (i + startSlideIndex - 1) ' スライドへのリンク
        If i + 1 <= pptTable.Rows.Count Then
            pptTable.Cell(i + 1, columnIndex).Shape.TextFrame.TextRange.ActionSettings(1).Hyperlink.Address = linkAddress
        End If
    Next i
    
    MsgBox "完了しました", vbInformation ' 処理完了のメッセージ
    
CleanExit:
    ' オブジェクトのクリーンアップ
    Set pptTable = Nothing
    Set pptShape = Nothing
    Set pptSlide = Nothing
    Set pptPres = Nothing
    Set pptApp = Nothing
    Exit Sub
    
ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical ' エラーメッセージの表示
    Resume CleanExit ' クリーンアップコードへ
End Sub

全体の概要

以下、全体の流れと各処理の解説を行います。

Excelシートからパラメータ(PowerPointのパス、スライド番号など)を読み込む。

PowerPointを開き、指定されたプレゼンテーションファイルを開く。

指定されたスライドと表を見つける。

指定された表の指定された列に、スライドへのリンクを追加する。

処理が完了したら、成功メッセージを表示する。

エラーが発生した場合は、エラーメッセージを表示する。

処理の解説

パラメータ読み込み

Excelのシートから、操作に必要なパラメータ(PowerPointのパスやスライド番号など)を読み込みます。

With ThisWorkbook.Sheets("Sheet1") ... End With

PowerPoint開始

PowerPointアプリケーションを開き、可視状態に設定します。

Set pptApp = CreateObject("PowerPoint.Application")pptApp.Visible = True

プレゼンテーション開く

指定されたパスのプレゼンテーションファイルを開きます。

Set pptPres = pptApp.Presentations.Open(pptPath)

スライドと表を取得

指定されたスライドに移動し、その中で指定された番号の表を探します。

Set pptSlide = pptPres.Slides(slideIndex)For Each pptShape In pptSlide.Shapes ... Next

表の指定された列に、スライドへのリンクを追加します。

リンクはスライド番号に基づいて設定されます。

For i = 1 To linkCount ... Next i

処理完了メッセージ

処理が完了したら、ユーザーに情報メッセージを表示します。

MsgBox "完了しました", vbInformation

エラーハンドリング

エラーが発生した場合は、エラーメッセージを表示し、オブジェクトのクリーンアップを行います。

On Error GoTo ErrorHandlerErrorHandler:

注意点

このマクロを実行すると、操作は元に戻せません。

特に、リンクの追加や変更は慎重に行ってください。

大量のデータを扱う場合、処理に時間がかかることがあります。

特に、PowerPointの開始やプレゼンテーションの読み込みは時間がかかりがちです。

PowerPoint操作には、”Microsoft PowerPoint Object Library”への参照設定が必要な場合があります。

VBAエディタの[ツール] > [参照設定]から設定できます。

ただし、このコードではCreateObjectを使用しているため、直接の参照設定は不要ですが、一部の環境では設定が必要な場合があります。

環境設定

PowerPointと連携するためには、PowerPointがインストールされている環境である必要があります。

特定の機能を使用するためには、VBAの参照設定で”Microsoft PowerPoint Object Library”を追加する必要があるかもしれませんが、上述のコードではCreateObjectを使っているため、明示的な追加は必要ありません。

ただし、他の機能を使う場合には追加が必要になることがあります。

コードの変更箇所

PowerPointのパス

PowerPointファイルの場所を指定します。

自分の環境にあるファイルパスに変更してください。

pptPath = .Range("C2").Value

スライド番号

リンクを追加したいスライドの番号を指定します。

スライド番号は1から始まります。

slideIndex = .Range("C3").Value

表のインデックス

スライド内でリンクを追加する表を指定します。

1番最初の表が1となります。

tableIndex = Val(.Range("C4").Value)

列番号

リンクを追加する列の番号を指定します。

列番号も1から始まります。

columnIndex = .Range("C5").Value

追加するリンクの総数を指定します。

linkCount = .Range("C6").Value

スタートするスライドのインデックス

リンクが指すスライドの開始番号を指定します。

この番号からリンク数分のリンクが作成されます。

startSlideIndex = .Range("C7").Value

まとめ:

ExcelのVBAを使用して、PowerPointの特定のスライドにある表にリンクを自動で追加する方法を解説しました。

このテクニックは、プレゼンテーション資料のナビゲーションを効率化し、よりプロフェッショナルな資料を作成するのに役立ちます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次