
We love spreadsheets. And of course, once every four years, we also get mad about soccer. So why not merge both in to one awesome, frivolous and fun thing: Introducing….
Excel soccer game
The best part is you don’t have to run up to play this. Set your aim and let RANDBETWEEN() decide your fate.
Check out a quick demo of the game below

Download Excel Soccer Game – VBA File
Click here to download the game workbook. Enable macros to enjoy it. View Code to see VBA code behind this game. Go to “Calc” tab to explore the calculations.
How is this game created?
We use same ideas as discussed in Excel animated chart tutorial. Here is the brief outline of how I made this game.
- This is just an XY Chart with images for ball, goal keeper and aim marker.
- After user inputs the aim (X & Y) for where the ball should go, we generate a random position to which Goal Keeper will dive.
- We then calculate 100 frames
- Co-ordinates (x,y) for ball and goal keeper at each frame
- When “Shoot” is clicked, we just run a for loop in VBA to pick 1 frame at a time and show
- Oh yeah, some IF formulas to check if GK stopped the ball or not. If so, we stop the animation and show an image with goal keeper + ball.
- Lastly, we update the scores and show the progress as a sparkline
As this is a technical bit, I made a small video explaining the process. Check it out below (or on Chandoo.org Youtube channel)
That is all for now. Happy soccer & spreadsheets.
Want to play & learn:
If you like playing while learning, then check out these awesome tuts:

















3 Responses to “CP049: Don’t do data dumps!!!”
Your title got me nervous because I'm all about data dumps, but not for attaching graphics to data dumps. My reason for using data dumps is when someone is trying to do analysis and their starting point is a report that's formatted in a way for a human to read. I instruct them to stop with the report and go get a data dump: just rows and columns and rows and columns.
Agreed, nearly all of my reports start with 100+ lines of simple table data.
That way you can build your functionality around pulling information from that tabled information.
Yes yes!