サイトアイコン にほんご Study

【コピペOK】パワーポイントのフラッシュカードをランダムに表示させるマクロを公開!

こんにちは!日本語教師のMilkyです。

本記事では、フラッシュカード(パワーポイント)をランダムで表示させるマクロのコードを公開しております。ぜひご利用ください!

利用方法

本記事で紹介しているコードを使用すれば、スライドショーをランダムな順序で簡単に表示できます。パワーポイントを使ってフラッシュカードを使っている日本語教師の皆様に、ぜひご利用いただきたいです😇

それでは早速、利用方法をご紹介します。

1. フラッシュカード(パワーポイント)の作成

まずは、フラッシュカード(パワーポイント)の作成をしてください。

こちらの記事で紹介しているツールを使用すれば、簡単にパワーポイントを作成できます◎

2. Windowsの方はこちら

以下の手順で、パワーポイントのマクロを書く欄にコードを入力します。

2-1. パワーポイントで、マクロを書く欄を開きます

元々、パワーポイントには「開発」というタブがないので、
以下の手順で「開発」タブを追加してください。

[開発] タブを表示する - Microsoft サポート
必要に応じ、 タブをリボンに追加します。

2-2. マクロの作成

以下の手順で、「マクロの作成」を行います。

PowerPointでマクロを作成する - Microsoft サポート
頻繁なタスクを自動化するマクロ レコーダーは、PowerPoint使用できません。 ただし、Visual Basic for Applications (VBA) を使用してマクロを作成または編集できます。

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. マクロの実行

以下の手順で「マクロの実行」を行うと、
フラッシュカードがランダムで表示されるスライドショーが開始します。

PowerPointでマクロを実行する - Microsoft サポート

3. Macの方はこちら

以下の手順で、パワーポイントのマクロを書く欄にコードを入力します。

3-1. パワーポイントで、マクロを書く欄を開きます

「ツール > マクロ > Visual Basic Editor」 から、
Visual Basic for Applications を開きます。

Visual Basic Editorを開く

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アルゴリズムに基づいています。スライドショーの実行中に、スライドは設定された順序で表示されますが、進行は手動で行われるように設定されています。

最後に

本記事では、フラッシュカード(パワーポイント)をランダムな順序で表示させるマクロのコードを公開いたしました。ぜひご活用ください!

モバイルバージョンを終了