How to Shuffle PowerPoint Slides Randomly
❎ No animations! We are going to code the scoreboard counter in PowerPoint!
How to Make a Countdown Timer in PowerPoint without Animations
If you would like to shuffle your PowerPoint slides randomly so that you could present them such that the same slides do not repeat twice, you are at the right place.
Here is how we create an Interactive PowerPoint Quiz Game:
Step 1: Enable Developer Tab
Windows: Office 2010 and above: File | Options | Customise Ribbon | ☑ Developer
Step 2: Open Visual Basic Editor
Windows: Developer | Visual Basic
MacOS: Office 2011 or 2016: Tools | Macro | Visual Basic Editor
Step 3: Insert VBA Macro Code
LastSlidevariables and run the code in the Visual Basic Editor Panel.
Sub ShuffleSlides() FirstSlide = 2 LastSlide = 7 Randomize For i = FirstSlide To LastSlide RSN = Int((LastSlide - FirstSlide + 1) * Rnd + FirstSlide) ActivePresentation.Slides(i).MoveTo (RSN) Next i End Sub
We can also run this code in Slide Show Mode in case you wish to use this interactive feature in your PowerPoint Games such as a Quiz Game where all the question slides have to be randomly shuffled. To do this, insert a shape in the first slide (or anywhere really), select the shape, go to Insert | Action | Run Macro | ShuffleSlides.
Now, if you click that shape in Slide Show Mode, your PowerPoint Slides will be randomly shuffled!
Randomize Function in VBA
Rnd function generates a random number from 0 to 1. For example:
0.9999. It is of the data type
Single, meaning that it holds decimal points. Remember to call the
Randomize Function before using the
Randomize randomizes the order of generating random numbers. There are many sequences or orders to generate pseudo-random numbers in VBA called seeds.
For a given seed, the same random number sequence is generated. If the first three random numbers are:
0.10, 0.90, 0.42, it will again be the same when random numbers are generated. Hence, we need to randomize the seed too by the
Randomize function. It initializes the random-number generator with a seed based on the system timer.
Generating Random Number in VBA
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
The upperbound and lowerbound are the highest and lowest number in our range. Hence, in order to generate a number between 5 and 10:
Int((10 – 5 + 1) * Rnd) + 5.
You can assign (store) this value to an integer variable in order to use the value. In this case, we store it in
RSN and this variable represents the generated random number.
Shuffle Only Even Or Odd Slides
If you have a set of questions only on even-numbered slides or a range of odd-numbered slides which you would like to shuffle without disturbing the rest, you can use the following VBA code in PowerPoint:
Sub ShuffleSlides() EvenShuffle = True 'false if only odd-numbered slides are shuffled FirstSlide = 2 'should be an even/odd number based on needs LastSlide = 8 Randomize For i = FirstSlide To LastSlide Step 2 generate: 'generate random number between FirstSlide and LastSlide RSN = Int((LastSlide - FirstSlide + 1) * Rnd) + FirstSlide If EvenShuffle = True Then If RSN Mod 2 = 1 Then GoTo generate Else If RSN Mod 2 = 0 Then GoTo generate End If ActivePresentation.Slides(i).MoveTo (RSN) If i < RSN Then ActivePresentation.Slides(RSN - 1).MoveTo (i) If i > RSN Then ActivePresentation.Slides(RSN + 1).MoveTo (i) Next i End Sub
Reverse PowerPoint Slides
The following VBA Macro Code will reverse the order of your PowerPoint Slides, i.e. your first slide will become the last slide, the second slide will become the second-last slide, and so on.
Sub ReverseSlideOrder() For i = 1 To 5 '2 to 5 is the slide range ActivePresentation.Slides(5).MoveTo (i) Next i End Sub
Shuffling Slides In Infinite Loop
The above tutorial shows how the PowerPoint slides can be shuffled once and played in slide-show mode in a random order such that the slides aren’t repeated. However, after one loop, the same shuffled order remains unless shuffled again.
In order to automate such that you can go through all the slides in an indefinite loop in slide-show mode, with a new randomised order for every loop, you can use the following code based on the code developed by The Tech Train:
Public Position, Range, AllSlides() As Integer Sub ShuffleAndBegin() 'change values according to your presentation FirstSlide = 2 LastSlide = 6 Range = (LastSlide - FirstSlide) ReDim AllSlides(0 To Range) For i = 0 To Range AllSlides(i) = FirstSlide + i Next i Randomize For N = 0 To Range J = Int((Range + 1) * Rnd) temp = AllSlides(N) AllSlides(N) = AllSlides(J) AllSlides(J) = temp Next N Position = 0 ActivePresentation.SlideShowWindow.View.GotoSlide AllSlides(Position) End Sub Sub Advance() Position = Position + 1 If Position > Range Then ShuffleAndBegin Else ActivePresentation.SlideShowWindow.View.GotoSlide AllSlides(Position) End If End Sub
A title slide must be present with a button that runs Sub ShuffleAndBegin() and initialises the code.
Amongst all the slides in our range that would be shuffled, a shape must be placed on all those slides and the shape must run Sub Advance() on click. The first loop of randomised slides would occur on click of the shape. Once the first loop is over, the slides would be shuffled again, and on click of the shape, the next slide of the newly randomised loop will occur.