How to Shuffle PowerPoint Slides Randomly
❎ No animations! We are going to code the scoreboard counter in PowerPoint!
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.