When I saw the Olympic medals won by each country by year infographic on nytimes my jaw almost dropped, go ahead see it and come back, I am sure you will love it too.
It is one of the coolest visualizations I have seen in the recent past and I see infographics all the time, its my passion.
So, I wanted to see if this infographic can be done in Excel, not pixel to pixel, but something close enough to pamper my ego. I was able to create something that looked like this:

Download the Total Olympic medals won by each country since 1896 excel sheet and play with it.
If you want to know how this is done, read on 🙂
1. My first challenge is to get the Olympic medal data per country
Thankfully, Olympics site has the medal counts by country data for each of the 25 editions of the summer games, [click here for 1896] I have copy-pasted the data to my sheet.
2. Next challenge is to find average latitude, longitude for all countries in the world
Thankfully CIA World fact book has the exact data for each country in a table, another ctrl+c, ctrl+v and I have the data in my sheet. [slightly refined data can be found on maxmind as well]
3. Now, the data is not clean
Unfortunately the data copied from Olympics site and CIA fact book doesn’t match as country names were different (USA, United States, United States of America for eg.), country names kept changing (do you know that Australia was called as Australasia sometime back.. :D). So I had to do quite some clean up (mainly using vlookup, filtering unique items etc.)
Finally, I had the data in a tabular format, country names, latitude, longitude, total medals won in rows, Olympic years in columns (1896 to 2004, except 1916, 1940 and 1944 when the games were canceled)
I had to convert latitude and longitude to y and x co-ordinates respectively so that I can plot them on 2 dimensions. I used this logic to do it:
x=(180+longitude)*(map-width/360)
y=(90-latitude)*(map-height/180)
4. Add a scroll bar form control and use it to select the year from 25 Olympic years
This was the easy step. I selected Menu > View > Toolbars > Forms to show the forms toolbar and then inserted a scroll bar control to my sheet. Then I associated it with a cell my sheet and limited the values to change between 1 and 25 (each increment for one of the 25 Olympic years)
![]()
Now, I have associated this scroll bar cell to fetch one Olympic years worth of data.
5. Create a bubble chart with the medal data
Now that I have the data in the format of x, y co-ordinates, medal count for each country for the selected year, I have created a bubble chart with this information, showing bubbles at each pair of (x,y) in the list.
6. Finally, show an outline map of the world in the background

The last step was easy, I searched for an outline map of the world and used it as my chart background, even though this is not part of the original NY Times infographic, it helps me in ensuring that the bubbles are indeed shown in the right places.
Of course there are some differences between my infographic of Olympic medal count and that of NY Times’, mainly,
- The bubbles overlap, but there is nothing I can do about it without writing additional logic. But as Nathan points out, non-overlapping bubbles may be slightly inaccurate.
- The other is, color of bubbles doesn’t change based on the continent it belongs to. Well, this can be done by editing the bubble colors manually, so I gave up.
- Finally, very few countries are omitted in this, mainly due to geopolitical changes, like Germanies getting united, Koreas getting separated, more countries becoming China :D, I did clean up 99% of the data, but there is always a troublesome country you never heard of.
Make sure you download and play with total Olympic medals won by each country since 1896 excel sheet
What do you think of this?
Also see: The art of excel charting – making ubercool dashboards
Junk the default charts, use this art grade templates instead
Did you fire a bullet graph today?

















6 Responses to “Make VBA String Comparisons Case In-sensitive [Quick Tip]”
Another way to test if Target.Value equal a string constant without regard to letter casing is to use the StrCmp function...
If StrComp("yes", Target.Value, vbTextCompare) = 0 Then
' Do something
End If
That's a cool way to compare. i just converted my values to strings and used the above code to compare. worked nicely
Thanks!
In case that option just needs to be used for a single comparison, you could use
If InStr(1, "yes", Target.Value, vbTextCompare) Then
'do something
End If
as well.
Nice tip, thanks! I never even thought to think there might be an easier way.
Regarding Chronology of VB in general, the Option Compare pragma appears at the very beginning of VB, way before classes and objects arrive (with VB6 - around 2000).
Today StrComp() and InStr() function offers a more local way to compare, fully object, thus more consistent with object programming (even if VB is still interpreted).
My only question here is : "what if you want to binary compare locally with re-entering functions or concurrency (with events) ?". This will lead to a real nightmare and probably a big nasty mess to debug.
By the way, congrats for you Millions/month visits 🙂
This is nice article.
I used these examples to help my understanding. Even Instr is similar to Find but it can be case sensitive and also case insensitive.
Hope the examples below help.
Public Sub CaseSensitive2()
If InStr(1, "Look in this string", "look", vbBinaryCompare) = 0 Then
MsgBox "woops, no match"
Else
MsgBox "at least one match"
End If
End Sub
Public Sub CaseSensitive()
If InStr("Look in this string", "look") = 0 Then
MsgBox "woops, no match"
Else
MsgBox "at least one match"
End If
End Sub
Public Sub NotCaseSensitive()
'doing alot of case insensitive searching and whatnot, you can put Option Compare Text
If InStr(1, "Look in this string", "look", vbTextCompare) = 0 Then
MsgBox "woops, no match"
Else
MsgBox "at least one match"
End If
End Sub