1. はじめに
PowerPointを使ったプレゼンやイベントで、スライドをランダムに切り替えると盛り上がります。
例えば、ゲーム大会でランダムに問題を選ぶ、授業で生徒の発表順を決める、ワークショップで議論のテーマを決めるなど、さまざまなシーンで活用できます。
本記事では、VBAを使ってスライドをランダムに切り替え、ルーレット風の演出をする方法を紹介します。
初心者の方でも簡単に試せるように、具体的なVBAコードとその設定方法を解説します。スクリーンショット付きの手順も用意したので、ぜひ活用してください。
以下にプレゼン資料に必要な5つのスキルに対応する書籍を紹介しています。難易度もわかるようにしていますので、参考にしてみてください。
-
【初心者からプロまで!】パワーポイントの作り方おすすめ本20選
この記事では、PowerPoint /パワーポイント(パワポ)によるプレゼン資料を作るためのスキル向上に有用な書籍を20冊紹介します。5つのスキルに沿った書籍で学習することで、総合的な資料作成スキルを向上させることができます。
続きを見る
2. PowerPoint スライドをランダムに切り替えるメリット
2-1. ランダム演出で盛り上げる
Power Pointを使って、クイズや抽選イベントを盛り上げることができます。利用シーンとしては以下のようなものがあります。
ルーレット風に表示することで、よりエンタメ性の高い演出が可能になります。
- クイズ大会でランダムに問題を選択
- 抽選イベントで当選者を決定
- 授業やワークショップでインタラクティブな要素を追加
- プレゼンテーションで視聴者の関心を引く
- 研修や社内ミーティングで意見をランダムにピックアップ
2-2. VBAにより、手作業不要で自動化
手動でスライドをランダムに選ぶと時間がかかりますが、VBAを使えばワンクリックで自動化できます。
2-3. マクロボタンで簡単操作
スライド1にマクロ実行用のボタンを配置すれば、誰でもワンクリックで開始できるため、操作が簡単です。
3. ルーレット風スライド切り替えの仕組み
本記事で紹介するVBAの動作は以下のようになります。
- スライド1にボタンを設置(クリックでマクロを実行)
- スライド2~最後のスライドをランダムに表示(高速に切り替え)
- 何回か切り替えた後、徐々にスピードを落としながら停止
- 最終的なスライドで止まり、クリックでスライド1に戻る
以下のステートマシンは、スライド切り替えの流れを示しています。この仕組みを理解することで、コードの流れがより明確になります。

4. 【初心者向けVBAサンプル】スライドをランダムに切り替えるコード
4-1. VBAの準備(初心者向け)
- 開発タブを有効にする
- PowerPointの「ファイル」→「オプション」→「リボンのユーザー設定」→「開発」にチェックを入れる
- VBAエディターを開く
- 「Alt + F11」キーを押してVBAエディターを開く
- 標準モジュールを追加し、コードを貼り付ける
- 「挿入」→「標準モジュール」を選択
4-2. コード作成
Option Explicit
Dim slideArray() As Integer ' スライド番号を格納
Dim finalSlide As Integer ' 最終的に表示するスライド
Dim stopFlag As Boolean ' 停止フラグ' ボタンを押したときにランダムスライドを開始
Sub RandomSlide()
Dim i As Integer, j As Integer, temp As Integer
Dim numSlides As Integer
Dim slideIndex As Integer
Dim delayTime As Double
Dim slowDownFactor As Double
numSlides = ActivePresentation.Slides.Count
If numSlides < 2 Then Exit Sub ' スライドが1枚以下なら終了
' スライド2?最後までのリストを作成
ReDim slideArray(2 To numSlides)
For i = 2 To numSlides
slideArray(i) = i
Next i
' スライドをランダムにシャッフル
Randomize
For i = 2 To numSlides
j = Int((numSlides - 1) * Rnd + 2) ' 2 から numSlides の範囲で乱数
temp = slideArray(i)
slideArray(i) = slideArray(j)
slideArray(j) = temp
Next i
' ルーレット風のスライド切り替え
stopFlag = False
delayTime = 0.1 ' 初期切り替え速度(秒)
slowDownFactor = 1.2 ' 減速倍率
For i = 1 To 10 ' ルーレットの回数
slideIndex = slideArray((i Mod (numSlides - 1)) + 2) ' ランダムなスライド選択
ActivePresentation.SlideShowWindow.View.GotoSlide slideIndex
Wait delayTime
delayTime = delayTime * slowDownFactor ' 徐々に減速
Next i
' 最後のスライドを確定
finalSlide = slideArray(Int((numSlides - 1) * Rnd + 2))
ActivePresentation.SlideShowWindow.View.GotoSlide finalSlide
stopFlag = True
End Sub
' スライドショーでクリックやキー入力があればスライド1に戻る
Sub OnSlideShowPageChange(ByVal Wn As SlideShowWindow)
If stopFlag Then ' クリックやキー入力があったらスライド1に戻る
Wn.View.GotoSlide 1
stopFlag = False
End If
End Sub
' 指定時間待機する(VBAはSleepがないためタイマーを使用)
Sub Wait(ByVal seconds As Double)
Dim startTime As Double
startTime = Timer
Do While Timer < startTime + seconds
DoEvents ' 処理を継続
Loop
End Sub
4-3. マクロ実行ボタンの設定
スライドルーレットを動かすためのボタンを作成します。
- 1スライド目に、以下のようなボタンとなる四角形を挿入します。

2. 挿入した四角形を選択した状態で、「挿入」タブ→「動作」を選択します。

3. 動作設定で、マクロの実行を選択し、作成したマクロ関数を選択します。(上記コードの場合、RandomSlide)
選択したら、OKボタンをクリックします。

4-4. スライドショーの実行
2スライド以降にルーレット表示するスライドを追加します。何枚でもOKです。
スライドを追加したら、スライドショーを実行します。この状態で1スライド目のボタンを押せば、ルーレット表示が開始されます。
たとえば、2~4スライド目にグー、チョキ、パーのスライドを作成すれば以下のようなじゃんけんルーレットができます。
この手順に従えば、初心者でも10〜15分程度でスムーズにVBAを設定できます。

5. コードの詳細解説
5-1. 変数の定義
最初に、スライドの管理に必要な変数を宣言します。
Option Explicit
Dim slideArray() As Integer ' スライド番号を格納
Dim finalSlide As Integer ' 最終的に表示するスライド
Dim stopFlag As Boolean ' 停止フラグ
• slideArray() : スライドの番号を格納する配列
• finalSlide : 最終的に選ばれるスライドの番号
• stopFlag : ルーレット終了後、クリック時にスライド1へ戻る処理の制御用フラグ
5-2. ランダムなスライド切り替えを開始する
このサブ関数が、スライドをランダムに切り替える処理のメイン部分です。
Sub RandomSlide()
1. スライド番号の取得
スライドの枚数を取得し、2枚以上ある場合のみ処理を続けます。
numSlides = ActivePresentation.Slides.Count
If numSlides < 2 Then Exit Sub ' スライドが1枚以下なら終了
2. スライド番号の配列を作成
2枚目以降のスライド番号をslideArrayに格納します。スライド1は常に開始スライドなので除外します。
ReDim slideArray(2 To numSlides)
For i = 2 To numSlides
slideArray(i) = i
Next i
3. 配列をランダムにシャッフル
slideArray の要素をランダムに並べ替え(シャッフル処理)します。Randomize で乱数を初期化しています。
Randomize
For i = 2 To numSlides
j = Int((numSlides - 1) * Rnd + 2) ' 2 から numSlides の範囲で乱数
temp = slideArray(i)
slideArray(i) = slideArray(j)
slideArray(j) = temp
Next i
4. ルーレット風のスライド切り替え
For文処理でランダムでスライドを表示します。 stopFlag を False に設定し、スライドショーを開始します。
delayTimeは最初の切り替え速度です。 最初は素早くスライドを切り替え、表示回数ごとにslowDownFactor を掛け算することでスライド切り替え速度を徐々に減速します。
slowDownFactorの数値を変えることで、減速の仕方を変えることができます。また、ルーレットの回数はFor文の繰り返し回数を変更することで、アレンジできます。
stopFlag = False
delayTime = 0.1 ' 初期切り替え速度(秒)
slowDownFactor = 1.2 ' 減速倍率
For i = 1 To 10 ' ルーレットの回数
slideIndex = slideArray((i Mod (numSlides - 1)) + 2) ' ランダムなスライド選択
ActivePresentation.SlideShowWindow.View.GotoSlide slideIndex
Wait delayTime
delayTime = delayTime * slowDownFactor ' 徐々に減速
Next i
上記のうち、Waitは以下のサブ関数で定義されています。
VBAには Sleep 関数がないため、 Timer を利用して待機時間を作成しています。DoEvents を入れることで、PowerPointの処理が止まらないようにしています。
Sub Wait(ByVal seconds As Double)
Dim startTime As Double
startTime = Timer
Do While Timer < startTime + seconds
DoEvents ' 処理を継続
Loop
End Sub
5. 最終スライドを確定
finalSlide にランダムで選ばれたスライド番号を表示します。
stopFlag = True にすることで、後のクリックイベントでスライド1へ戻る動作を有効化します。
finalSlide = slideArray(Int((numSlides - 1) * Rnd + 2))
ActivePresentation.SlideShowWindow.View.GotoSlide finalSlide
stopFlag = True
5-3. スライドショー中のクリックでスライド1に戻る
ルーレットが止まった後にクリックすると、スライド1へ戻ります。
stopFlag をリセットして、再度ランダム切り替えを実行可能になります。
Sub OnSlideShowPageChange(ByVal Wn As SlideShowWindow)
If stopFlag Then
Wn.View.GotoSlide 1
stopFlag = False
End If
End Sub
6. 応用アイデア
ここまでで設定したままでも使えますが、演出を加えたり、ルーレットとしての応用例を紹介します。
演出の追加
スライド切り替えの設定を加えることで、ルーレットの演出をアレンジすることができます。
- スライド切り替えのアニメーションを追加する
- スライド切り替え時のサウンドを設定する
ルーレットとしての応用例
「写真で一言」をスライドで作成することができます。作り方は以下の記事が参考になります。
「早口言葉ルーレット」も応用例として作成できます。以下の書籍が面白くてネタとして参考になります。
7. まとめ
VBAを使えば、PowerPointでスライドをルーレット風に切り替えることができます。
どんな場面で試してみたいですか? ぜひ実践して、活用方法を広げてみてください!
自分なりのアレンジを加えて、独自のプレゼンやイベントを作ってみるのもおすすめです。
