こんにちは!日本語教師のMilkyです。
本記事では、フラッシュカード(パワーポイント)をランダムで表示させるマクロのコードを公開しております。ぜひご利用ください!
利用方法
本記事で紹介しているコードを使用すれば、スライドショーをランダムな順序で簡単に表示できます。パワーポイントを使ってフラッシュカードを使っている日本語教師の皆様に、ぜひご利用いただきたいです😇
それでは早速、利用方法をご紹介します。
1. フラッシュカード(パワーポイント)の作成
まずは、フラッシュカード(パワーポイント)の作成をしてください。
こちらの記事で紹介しているツールを使用すれば、簡単にパワーポイントを作成できます◎
2. Windowsの方はこちら
以下の手順で、パワーポイントのマクロを書く欄にコードを入力します。
2-1. パワーポイントで、マクロを書く欄を開きます
元々、パワーポイントには「開発」というタブがないので、
以下の手順で「開発」タブを追加してください。
2-2. マクロの作成
以下の手順で、「マクロの作成」を行います。
2-3. コードをコピー&ペースト
2-2 の手順で開いた Visual Basic for Applications に
以下のコードをコピー&ペーストし、保存ボタンをクリックします。
Sub RandomSlideShow()
Dim slideOrder() As Long
Dim i As Long, j As Long
Dim temp As Long
Dim slideCount As Long
Dim slideShowSettings As slideShowSettings
Dim slideShowWindow As slideShowWindow
' Get the number of slides
slideCount = ActivePresentation.Slides.Count
' Create an array to store slide order
ReDim slideOrder(1 To slideCount)
For i = 1 To slideCount
slideOrder(i) = i
Next i
' Shuffle the array using Fisher-Yates algorithm
For i = slideCount To 2 Step -1
j = Int(Rnd() * i) + 1
temp = slideOrder(i)
slideOrder(i) = slideOrder(j)
slideOrder(j) = temp
Next i
' Set up and start the slide show
Set slideShowSettings = ActivePresentation.slideShowSettings
With slideShowSettings
.StartingSlide = 1
.EndingSlide = slideCount
.RangeType = ppShowAll
.AdvanceMode = ppSlideShowManualAdvance
.LoopUntilStopped = msoFalse
.showWithNarration = msoTrue
.showWithAnimation = msoTrue
End With
' Run the slide show
Set slideShowWindow = slideShowSettings.Run
' Display the slides in random order
For i = 1 To slideCount
slideShowWindow.View.GotoSlide slideOrder(i)
' Wait for a moment to allow the slide to display
DoEvents
Next i
End Sub
2-4. マクロの実行
以下の手順で「マクロの実行」を行うと、
フラッシュカードがランダムで表示されるスライドショーが開始します。
3. Macの方はこちら
以下の手順で、パワーポイントのマクロを書く欄にコードを入力します。
3-1. パワーポイントで、マクロを書く欄を開きます
「ツール > マクロ > Visual Basic Editor」 から、
Visual Basic for Applications を開きます。
3-2. マクロの作成
Visual Basic for Applications 左上のボタンを押下し、「モジュールの追加」を行います。
すると、左側にモジュールが追加され、中央にコードを書く欄が出現します。
3-3. コードをコピー&ペースト
2-2 の手順で開いた コードを書く欄に
以下のコードをコピー&ペーストし、保存ボタンをクリックします。
Sub RandomSlideShow()
Dim slideOrder() As Long
Dim i As Long, j As Long
Dim temp As Long
Dim slideCount As Long
Dim slideShowSettings As slideShowSettings
Dim slideShowWindow As slideShowWindow
' Get the number of slides
slideCount = ActivePresentation.Slides.Count
' Create an array to store slide order
ReDim slideOrder(1 To slideCount)
For i = 1 To slideCount
slideOrder(i) = i
Next i
' Shuffle the array using Fisher-Yates algorithm
For i = slideCount To 2 Step -1
j = Int(Rnd() * i) + 1
temp = slideOrder(i)
slideOrder(i) = slideOrder(j)
slideOrder(j) = temp
Next i
' Set up and start the slide show
Set slideShowSettings = ActivePresentation.slideShowSettings
With slideShowSettings
.StartingSlide = 1
.EndingSlide = slideCount
.RangeType = ppShowAll
.AdvanceMode = ppSlideShowManualAdvance
.LoopUntilStopped = msoFalse
.showWithNarration = msoTrue
.showWithAnimation = msoTrue
End With
' Run the slide show
Set slideShowWindow = slideShowSettings.Run
' Display the slides in random order
For i = 1 To slideCount
slideShowWindow.View.GotoSlide slideOrder(i)
' Wait for a moment to allow the slide to display
DoEvents
Next i
End Sub
3-4. マクロの実行
「ツール > マクロ > マクロ」をクリックし、
「RandomSlideShow」を選択し、「実行」をクリックすると、
フラッシュカードがランダムで表示されるスライドショーが開始します。
【補足】コード解説
最後に、本記事で紹介したコードを簡単に解説します。
興味のある方はぜひご覧ください👀
1. 変数の宣言
Dim slideOrder() As Long
Dim i As Long, j As Long
Dim temp As Long
Dim slideCount As Long
Dim slideShowSettings As slideShowSettings
Dim slideShowWindow As slideShowWindow
slideOrder() As Long: スライドの順序を格納するための配列を宣言しています。この配列にはスライド番号が入ります。
i, j As Long: ループで使用するカウンタ変数です。
temp As Long: 配列の要素を一時的に保存するための変数です(シャッフル時に使用)。
slideCount As Long: プレゼンテーションに含まれるスライドの総数を格納する変数です。
slideShowSettings As slideShowSettings: スライドショーの設定を管理するオブジェクトです。
slideShowWindow As slideShowWindow: 実行中のスライドショーのウィンドウを管理するオブジェクトです。
2. スライド数の取得
slideCount = ActivePresentation.Slides.Count
ActivePresentation.Slides.Count: 現在開いているプレゼンテーション内のスライドの数を取得し、それを slideCount
変数に格納します。
3. スライド順序を配列に格納
ReDim slideOrder(1 To slideCount)
For i = 1 To slideCount
slideOrder(i) = i
Next i
ReDim slideOrder(1 To slideCount): slideOrder
配列のサイズを、スライドの数に合わせて動的に再定義します。
For i = 1 To slideCount: 各スライド番号(1からスライドの数まで)を配列 slideOrder
に格納します。この時点ではスライドは順番通りです。
4. スライド順序をランダムに並べ替え(シャッフル)
For i = slideCount To 2 Step -1
j = Int(Rnd() * i) + 1
temp = slideOrder(i)
slideOrder(i) = slideOrder(j)
slideOrder(j) = temp
Next i
・For i = slideCount To 2 Step -1: このループでは、スライド番号の配列を後ろから順に処理します。
・j = Int(Rnd() * i) + 1: Rnd()
は 0 以上 1 未満のランダムな値を返し、それを i
に掛けてから整数に変換します。これにより、1から i
までのランダムな値を生成します。
・temp = slideOrder(i), slideOrder(i) = slideOrder(j), slideOrder(j) = temp: スライド順序の配列の中で、ランダムに選んだ要素と現在の要素を交換します。これにより、配列がランダムな順序にシャッフルされます。
5. スライドショーの設定
Set slideShowSettings = ActivePresentation.slideShowSettings
With slideShowSettings
.StartingSlide = 1
.EndingSlide = slideCount
.RangeType = ppShowAll
.AdvanceMode = ppSlideShowManualAdvance
.LoopUntilStopped = msoFalse
.showWithNarration = msoTrue
.showWithAnimation = msoTrue
End With
Set slideShowSettings = ActivePresentation.slideShowSettings: 現在のプレゼンテーションのスライドショー設定を取得します。
StartingSlide, EndingSlide: スライドショーの開始スライドと終了スライドを設定します。ここでは、全てのスライドを対象に設定しています。
RangeType = ppShowAll: 全てのスライドをスライドショーに含める設定です。
AdvanceMode = ppSlideShowManualAdvance: スライドは手動で進むように設定しています。
LoopUntilStopped = msoFalse: スライドショーが一巡した後、再び最初のスライドに戻らないように設定します(ループしない)。
showWithNarration = msoTrue, showWithAnimation = msoTrue: ナレーションとアニメーションをスライドショーで使用する設定です。
6. スライドショーを実行してランダム順序で表示
Set slideShowWindow = slideShowSettings.Run
For i = 1 To slideCount
slideShowWindow.View.GotoSlide slideOrder(i)
' Wait for a moment to allow the slide to display
DoEvents
Next i
Set slideShowWindow = slideShowSettings.Run: 設定したスライドショーを実行し、そのスライドショーウィンドウの参照を slideShowWindow
に取得します。
For i = 1 To slideCount: シャッフルされたスライド順序に基づいて、各スライドを表示します。
slideShowWindow.View.GotoSlide slideOrder(i): 現在のスライドショーウィンドウで、指定したスライド番号に移動します。シャッフルされた順序に従ってスライドを表示します。DoEvents: この行はVBAにおいて、他の処理を一時的に許可するために使用され、スライドの表示が視覚的に反映されるようにします。
7. まとめ
このマクロは、スライドショーを開始し、スライドをランダムな順序で表示します。シャッフルされた順序はFisher-Yatesアルゴリズムに基づいています。スライドショーの実行中に、スライドは設定された順序で表示されますが、進行は手動で行われるように設定されています。
最後に
本記事では、フラッシュカード(パワーポイント)をランダムな順序で表示させるマクロのコードを公開いたしました。ぜひご活用ください!