スライドショーを実行するときにスライドをランダムに表示させたい、という要望の解決策の一つとして、スライドをランダムに並び替えるマクロをご紹介しました。
このマクロは考え方がとても簡単なところがおすすめですが、やっぱり、スライドを並び替えるのではなく、スライドショーを実行するときにランダムな順序で表示させたいという要望はあります。
そのための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 SubVBE(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マクロ