Home » パワーポイントマクロ・PowerPoint VBAの使い方 » スライドショー » ランダムにスライドを表示するPowerPointマクロ

ランダムにスライドを表示するPowerPointマクロ

対象:PowerPoint2003, PowerPoint2007, PowerPoint2010

スライドショーを実行するときにスライドをランダムに表示させたい、という要望の解決策の一つとして、スライドをランダムに並び替えるマクロをご紹介しました。

このマクロは考え方がとても簡単なところがおすすめですが、やっぱり、スライドを並び替えるのではなく、スライドショーを実行するときにランダムな順序で表示させたいという要望はあります。

そのためのVBA(Visual Basic for Applications)マクロをご紹介します。

PowerPointの目的別スライドショー機能を利用したマクロです。

[スポンサードリンク]

ランダムな順序にした目的別スライドショーを作成しておいて、そのランダムな順序の目的別スライドショーを実行することで、ランダム表示が行われるというマクロです。

▼スライドショーでランダムにスライドを表示させるマクロ

Sub ランダムにスライドを表示するスライドショー()

 Const ssTitle As String = "ランダムスライドショー"

 Dim cnt As Long
 Dim flg() As Boolean
 Dim sld() As Variant
 Dim num As Long
 Dim i As Long
 Dim ss As NamedSlideShow

 With ActivePresentation

  cnt = .Slides.Count
  ReDim flg(1 To cnt)
  ReDim sld(1 To cnt)

  Randomize
  For i = 1 To cnt
   Do
    num = Int(Rnd * cnt) + 1
    If flg(num) = False Then
     flg(num) = True
     sld(i) = .Slides.Item(num).SlideID
     Exit Do
    End If
   Loop
  Next i

  With .SlideShowSettings
   For Each ss In .NamedSlideShows
    If ss.Name = ssTitle Then
     .NamedSlideShows(ssTitle).Delete
     Exit For
    End If
   Next

   .RangeType = ppShowNamedSlideShow
   .NamedSlideShows.Add ssTitle, sld
   .SlideShowName = ssTitle
   .Run
  End With

 End With

End Sub

VBE(Visual Basic Editor)を起動して、標準モジュールに上記のマクロを記述して、実行してやると、ランダムな順序でスライドが表示されるスライドショーが行われます。

最後の4行
   .RangeType = ppShowNamedSlideShow
   .NamedSlideShows.Add ssTitle, sld
   .SlideShowName = ssTitle
   .Run
が、ランダムな順序の目的別スライドショーを作成して、実行している箇所です。

その前の
   For Each ss In .NamedSlideShows
    If ss.Name = ssTitle Then
     .NamedSlideShows(ssTitle).Delete
     Exit For
    End If
   Next
は、同じ名前の目的別スライドショーを探して削除している箇所です。

ここで使われている定数・ssTitleには、マクロの最初で
 Const ssTitle As String = "ランダムスライドショー"
と「ランダムスライドショー」という文字列を設定しています。

目的別スライドショーを設定する
   .NamedSlideShows.Add ssTitle, sld
の配列・sldに、スライド番号をランダムに入れているのが、
  Randomize
  For i = 1 To cnt
   Do
    num = Int(Rnd * cnt) + 1
    If flg(num) = False Then
     flg(num) = True
     sld(i) = .Slides.Item(num).SlideID
     Exit Do
    End If
   Loop
  Next i
の部分です。

このロジックは、先日ご紹介した、重複しないランダムな数値・乱数を作成するExcelマクロと同じです。

先日の重複しない乱数を作成するExcelマクロでは
 Randomize
 For Each c In Selection
  Do
   num = Int(Rnd * cnt) + 1
   If flg(num) = False Then
    flg(num) = True
    Exit Do
   End If
  Loop
  c.Value = num
 Next
とループ処理を抜けたあとに数値をセルに入力していましたが、今回のマクロではループ処理の中で
     sld(i) = .Slides.Item(num).SlideID
と配列に値を入力しているところが違うだけです。

その前の
  cnt = .Slides.Count
  ReDim flg(1 To cnt)
  ReDim sld(1 To cnt)
では、スライドの枚数をカウントして、スライド番号を格納する配列と、ランダムに並び替えるときに使うフラグ用配列のサイズを決めています。

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » スライドショー » ランダムにスライドを表示するPowerPointマクロ

「スライドショー」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.