##はじめに
前回記事【PowerPoint】スライドをランダムで表示では2枚までしかセットで入れ替えることができませんでしたが、今回は数値を指定すると複数セットで分けることができるよう作成しました。
使い方や設定方法は前回記事をご覧ください。

##準備
-
コードはSlideモジュールに記述する。(前回と同じ。)
-
スライド終了時にマクロを実行する。(前回と同じ。)
-
タイトルスライド(スライド1)に”inputTextbox”という名前のオートシェイプを作成する。
そこに入力された数字をもとにスライドを分けるという仕組み。
例えば、「7」を入力していると7枚ごとに(タイトルスライド除く)ランダムに振り分ける。
##スライドを指定した数のセットで入れ替える
###コード
Public Sub OnSlideShowTerminate(ByVal Wn As SlideShowWindow)
Dim sld As Long
Dim cnt As Long
Dim i As Long
Dim sld1 As Slide
Dim shp As Shape
Dim setNumber As Long
Dim arry() As Variant
cnt = ActivePresentation.Slides.Count
Set sld1 = ActivePresentation.Slides(1)
Set shp = Shapes("inputTextbox")
sld1.Select
If ActiveWindow.ViewType = ppViewSlideSorter Then
ActiveWindow.ViewType = ppViewNormal
End If
shp.Select
setNumber = shp.TextFrame.TextRange.Text
If IsNumeric(setNumber) = False Then
MsgBox ("数値を入力してください。")
Exit Sub
End If
If cnt < 2 * setNumber Then
MsgBox ("スライド数が足りません。")
Exit Sub
ElseIf cnt = 2 Then
MsgBox ("スライド数を2以上にしてください。")
Exit Sub
End If
If setNumber = 1 Then
GoTo L1:
ElseIf Not cnt Mod setNumber = 1 Then
MsgBox ("スライド数をセットした倍数にしてください。")
Exit Sub
End If
L1:
ActiveWindow.ViewType = ppViewSlideSorter
Randomize
For i = 1 To cnt
sld = (cnt - 2) * Rnd + 2
If (sld - 2) Mod setNumber = 0 Then
ReDim arry(setNumber)
For k = 0 To setNumber - 1
arry(k) = sld
sld = sld + 1
Next k
ActivePresentation.Slides.Range(arry).Select
ActiveWindow.Selection.Cut
ActivePresentation.Slides(cnt - setNumber).Select
ActiveWindow.View.Paste
Else
i = i - 1
End If
Next i
ActiveWindow.ViewType = ppViewNormal
End Sub
###解説
前回より変更した箇所を解説します。
Set sld1 = ActivePresentation.Slides(1)
スライド(1)を変数に代入。
Set shp = Shapes("inputTextbox")
"inputTextbox"という名前の図形を変数に代入。名前はスライド(1)で作成した図形の名前にする。
sld1.Select
スライド(1)を選択。
If ActiveWindow.ViewType = ppViewSlideSorter Then
ActiveWindow.ViewType = ppViewNormal
End If
エラー等でスライド一覧モードになっている場合は標準モードに戻す。
shp.Select
スライド(1)の"inputTextbox"を選択。
setNumber = shp.TextFrame.TextRange.Text
入力した数値をセット数に代入。
If IsNumeric(setNumber) = False Then
MsgBox ("数値を入力してください。")
Exit Sub
End If
もし数値じゃない場合マクロ終了。
If cnt < 2 * setNumber Then
MsgBox ("スライド数が足りません。")
Exit Sub
ElseIf cnt = 2 Then
MsgBox ("スライド数を2以上にしてください。")
Exit Sub
End If
スライド数が入れ替えれる数より少ない場合マクロ終了。
If setNumber = 1 Then
GoTo L1
ElseIf Not cnt Mod setNumber = 1 Then
MsgBox ("スライド数をセットした倍数にしてください。")
Exit Sub
End If
L1:
セットした数が1の時はマクロ継続。
スライド数がセットした数で割り切れない場合、マクロ終了。
If (sld - 2) Mod setNumber = 0 Then
スライド番号をタイトルスライド除くsetNumberの倍数で指定。
ReDim arry(setNumber)
配列を再定義。
For k = 0 To setNumber - 1
arry(k) = sld
sld = sld + 1
Next k
スライド番号をセット数格納する。
Else
i = i - 1
End If
条件外の時繰り返し回数を増やす
##まとめ
「スライドを指定した数ごとにランダムで表示する」に関して説明しました。
ぜひご活用ください。