Ever wanted to calculate distance using Excel – between two locations (physical addresses)?
If we know the addresses, we can go to either Google Maps or Bing Maps and type them out to find the distance and travel time. But what if you are building some model (or calculator) and want to find out the distance, travel time, address points (latitude, longitude) and may be even distance matrix (given two sets of points, all distances between them)? We can use the public APIs from Bing maps or Google Maps to get the answer to our spreadsheet.
What you need:
- Free maps API from either Google Maps or Bing Maps
- Excel 2013 or above (we will be using WEBSERVICE() and FILTERXML() functions in Excel)
How to get the API Key from Google Maps or Bing Maps:
The API key process is somewhat technical and can be confusing. Plus for Google Maps API, you need to provide your credit card details (according to Google, you will not be billed automatically though). I made a small video explaining the process. Watch it below (or on our YouTube channel).
Using Excel to calculate distance & travel time between two points – Bing Maps API
As the process for getting Bing Maps API key is easy, let’s assume that is what you have.
Let’s say you have the api key in a cell named bingmaps.key
In this demo, we focus on calculating distance & travel time between one set of points, but you can use the ideas to calculate distance matrix for a range of points. For example, you can calculate travel time between all your warehouses and customer locations easily.
Start by creating a range of cells to capture origin & destination addresses. For Bing maps API, we need address to be broken in to below pieces.
Step 1: Fetch Latitude and Longitude for the addresses
Before calculating the distance, we need to know where on earth our addresses are. So we will use point lookup API to convert address to geolocation (lat&long). To do this, we call
http://dev.virtualearth.net/REST/v1/Locations?countryRegion=$1&adminDistrict=$2&locality=$3&postalCode=$4&addressLine=$5&maxResults=1&o=xml&key=bingmaps.key
with our address.
Notice all $ symbols? Use SUBSTITUTE to replace them with actual location values.
When you call this URL using WEBSERVICE(), you will get an XML output (as our output parameter is o=xml, if you omit this, you will get json).
Sample output for this looks like below:
<?xml version=”1.0″ encoding=”utf-8″?><Response xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://schemas.microsoft.com/search/local/ws/rest/v1″><Copyright>Copyright © 2018 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.</Copyright><BrandLogoUri>http://dev.virtualearth.net/Branding/logo_powered_by.png</BrandLogoUri><StatusCode>200</StatusCode><StatusDescription>OK</StatusDescription><AuthenticationResultCode>ValidCredentials</AuthenticationResultCode><TraceId>_REMOVED_</TraceId><ResourceSets><ResourceSet><EstimatedTotal>1</EstimatedTotal><Resources><Location><Name>Phillip St, Johnsonville, Wellington 6037, New Zealand</Name><Point><Latitude>-41.22292</Latitude><Longitude>174.80164</Longitude></Point><BoundingBox><SouthLatitude>-41.2241799</SouthLatitude><WestLongitude>174.80136</WestLongitude><NorthLatitude>-41.22166</NorthLatitude><EastLongitude>174.80196</EastLongitude></BoundingBox><EntityType>RoadBlock</EntityType><Address><AddressLine>Phillip St</AddressLine><AdminDistrict>Wellington</AdminDistrict><AdminDistrict2>Wellington City</AdminDistrict2><CountryRegion>New Zealand</CountryRegion><FormattedAddress>Phillip St, Johnsonville, Wellington 6037, New Zealand</FormattedAddress><Locality>Wellington</Locality><PostalCode>6037</PostalCode></Address><Confidence>High</Confidence><MatchCode>Good</MatchCode><GeocodePoint><Latitude>-41.22292</Latitude><Longitude>174.80164</Longitude><CalculationMethod>Interpolation</CalculationMethod><UsageType>Display</UsageType></GeocodePoint><GeocodePoint><Latitude>-41.22292</Latitude><Longitude>174.80164</Longitude><CalculationMethod>Interpolation</CalculationMethod><UsageType>Route</UsageType></GeocodePoint></Location></Resources></ResourceSet></ResourceSets></Response>
From this XML, we need to extract the LAT & LONG values highlighted in blue. We can use FILTERXML() to do that.
Let’s say the output of WEBSERVICE is in cell C21.
We can use FILTERXML() like this:
=FILTERXML(C21,”//Latitude[1]”)
=FILTERXML(C21,”//Longitude[1]”)
This will give us both lat & long values.
How does FILTERXML() work? It takes the XML value in C21 and finds the first Latitude tag (hence [1]) anywhere (hence //)
You can use FILTERXML to test the status code for the response or other interesting bits too.
Step 2: Calculate distance between two geolocations
Once we have lat & long values for both origin and destination, we can call distance lookup API to calculate distance, travel time values.
The distance lookup URL is:
https://dev.virtualearth.net/REST/v1/Routes/DistanceMatrix?origins=$1&destinations=$2&travelMode=$3&o=xml&key=bingmaps.key
For example, the distance lookup URL for above addresses is:
https://dev.virtualearth.net/REST/v1/Routes/DistanceMatrix?origins=-41.22292,174.80164&destinations=-41.27868,174.77506&travelMode=driving&o=xml&key=$k
The output for this is an XML that looks like:
<?xml version=”1.0″ encoding=”utf-8″?><Response xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://schemas.microsoft.com/search/local/ws/rest/v1″><Copyright>Copyright © 2018 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.</Copyright><BrandLogoUri>http://dev.virtualearth.net/Branding/logo_powered_by.png</BrandLogoUri><StatusCode>200</StatusCode><StatusDescription>OK</StatusDescription><AuthenticationResultCode>ValidCredentials</AuthenticationResultCode><TraceId>_REMOVED_</TraceId><ResourceSets><ResourceSet><EstimatedTotal>1</EstimatedTotal><Resources><Resource xsi:type=”DistanceMatrix”><ErrorMessage>Request accepted.</ErrorMessage><Origins><Coordinate><Latitude>-41.22292</Latitude><Longitude>174.80164</Longitude></Coordinate></Origins><Destinations><Coordinate><Latitude>-41.27868</Latitude><Longitude>174.77506</Longitude></Coordinate></Destinations><Results><Distance><DepartureTime xsi:nil=”true” /><OriginIndex>0</OriginIndex><DestinationIndex>0</DestinationIndex><TravelDistance>8.96955555555556</TravelDistance><TravelDuration>7.29166666666667</TravelDuration><TotalWalkDuration>0</TotalWalkDuration></Distance></Results></Resource></Resources></ResourceSet></ResourceSets></Response>
Again, we can use FILTERXML() to extract the relevant bits (=FILTERXML(C32,”//TravelDistance[1]”) and =FILTERXML(C32,”//TravelDuration[1]”))
The default output values are in KM for distance and minutes for duration. You can change this to miles, hours etc. too by using extra parameters in the lookup URL. Please read the Bing maps developer documentation for more.
Distance & travel time in Excel – Google Maps API
Let’s say your Google Maps API key is in a cell named gmaps.key
This API is really easy to use compared to Bing maps (as we need to make just one call).
The request URL is:
https://maps.googleapis.com/maps/api/distancematrix/xml?origins=$1&destinations=$2&mode=$3&key=gmaps.key
For example, let’s lookup the travel time and distance between Microsoft & APPLE offices.
The sample URL is:
https://maps.googleapis.com/maps/api/distancematrix/xml?origins=1,+Infinity+loop,+San+Francisco,+CA&destinations=Redmond,+Seattle,+WA&mode=driving&key=gmaps.key
The response is XML (if you want json, then replace xml with json) like below:
<?xml version=””1.0″” encoding=””UTF-8″”?>
<DistanceMatrixResponse>
<status>OK</status>
<origin_address>Apple Campus, Cupertino, CA 95014, USA</origin_address>
<destination_address>Redmond, WA, USA</destination_address>
<row>
<element>
<status>OK</status>
<duration>
<value>47736</value>
<text>13 hours 16 mins</text>
</duration>
<distance>
<value>1379709</value>
<text>1,380 km</text>
</distance>
</element>
</row>
</DistanceMatrixResponse>
We can FILTERXML this response to extract the important bits like this:
=FILTERXML(C15,”//distance[1]/text”)
=FILTERXML(C15,”//duration[1]/text”)
Download distance calculator template
Click here to download distance, travel time calculator template to see all these formulas in action. You must enter your API key to get it work. Examine the formulas and XML formats to learn more about how these APIs work and how to integrate them to your spreadsheet models.
More examples of WEBSERVICE():
- Finding nearest zip codes using webservice() and filterxml()
- Integrating WEBSERVICE() with trip planner spreadsheet [Microsoft blog]
Made something cool with WEBSERVICE()?
Did you make something cool and fun using WEBSERVICE() and FILTERXML()? Please share the ideas and tips in comments section.
28 Responses to “CP024: Customize Excel to boost your productivity”
I think that the most useful customisation that I utilise frequently is some code I found that allows multiple items to be selected from a data validation list. For example one workbook we use lists the business drivers for a project. Another uses this technique to select the staff involved in a particular project. See http://blog.contextures.com/archives/2009/09/18/select-multiple-items-from-excel-data-validation-list/
Another terrific podcast Chandoo! Glad to hear that you, your family, friends and community are recovering well from HurHur.
You did a great job of covering so many of the customization techniques that I use but one that I really like is the addition of those top portion of the quick access tool bar with items that I use often but are not standard to any of the tool bar options.
Thank again Chandoo for the terrific website! It definitely is helping to make me awesome in Excel.
I customise excel toolbars by inserting an icon and dragging it to the appropriate area.
I prefer not to customize (too much).. I use Excel on a work pc, on two pc's at home, and sometimes on other PC's (even on different languages). I've found that if I keep the most "standard" look, I manage to get around on any pc, whatever the language pack.
The only thing I do is "pinning" the most used files on the Windows taskbar. And even then I sometimes forget what I placed where, and look it up manually anyway...
Hi, Chandoo. Thanks for the complete review of customizations. I use most of the items you mention, such as Options to set the default font to “old” Arial rather than Cambria. I’ve also adapted the QAT, adding a button to Repeat last action as well as ones to close the current workbook and the Excel application. Lastly, I developed a personal Add-in that contains macros and changes the ribbon (via Microsoft’s Custom UI editor) to rearrange buttons for functions I always use and adds a new ribbon tab with buttons for my personal macros. For example, one of my most frequently used macros deletes all rows below and columns to the right of a selected cell and resets the Excel used range value for the worksheet (helpful for when I press Ctrl-End).
Thank you again for another great podcast! I always learn something from your podcast/Blog/site. I can't believe I never bothered to look at setting the number of sheets excel creates when you open a New workbook. That will save me time everyday!
I usually create a Personal Macro set to use, as well as creating some custom ribbon and toolbar sets to make my most needed functions handy (I even include some personal macros in these toolbars.) I also spend some time creating some themes to match the Company reporting colors so that my work can easily be incorporated into company communications.
Thanks for helping me be awesome at Excel everyday!
Hi Chandoo - excellent podcast. At the moment I only use the quick access tool bar to add not standard icons. But now I have several techniques that I am going to try. Thanks
excellent podcast!! not enough users maximise their productivity by making Excel more comfortable to work with!!
I use many of the techniques already mentioned (personal macro book, customised QAT/ribbon, etc) but but, instead of adding lot's of buttons I find it's better learn and use the relevant keyboard shortcuts instead of adding buttons for all those functions you use all the time (avoid button overload!!).
Far better to add buttons for functions you don't use often and that are difficult to find/use in their regular guise
I also use a default 'dashboard' workbook that has hyperlinks to a handful of files I use regularly.
also maybe worth mentioning creating default workbook/worksheet 'styles' - to do this create a workbook with the formats you want (fonts, page setup, # of sheets, etc) and save it to your excel start folder with the name BOOK (use SHEET for the sheet template). From then on all new books/sheets will have the same basic formatting
Thanks for the podcast Chandoo, glad you are recovering from the typhoon experience.
Here at work we created 2 template files, a "simple" one and a "large" one. We often have to put together engineering calculations and having these templates makes it so much faster. The simple one has a cover page (used for tracking revisions) and then a sheet set out in our standard format. The large one has the same cover page, then a contents page that has macro buttons to jump to any of the 10 tabs set up in it. And yes, we often use 5-10 tabs when doing our calculations! This makes the navigation much easier and means we can get on with calcs and not have to spend time formatting.
Thanks and enjoy, Oxi
Hi Chandoo – I liked this episode. So far I only use quick access bar to add icons for Macros, special paste etc.. Looking forward to explore some of the techniques shared by you. Thanks
Thanks for the podcast. There's a couple of things I'll have to try.
I've set up a default workbook that's saved to my excel start directory that contains:
* corporate colours and fonts
* a cover sheet
* modified and expanded cell styles
* default table and pivot table styles
* custom page setup settings
Another thing I've tried is creating chart templates which saves a bit of time.
My Quick Access toolbar is jampacked with macros:
- Save all open spreadsheets
- Backup the active workbook to another folder. Useful if I'm making big changes to the spreadsheet that i might want to revert later.
- Copy & Paste special values. Why click two buttons when you can click one?
- Set my preferred number formatting
- Format graphs in company colours
- Apply red/green conditional formatting for growths data. 0% growth is white, 20% growth is green, -20% growth is red
- Format and apply settings to pivot tables as I like them. E.g. Tabular format, no retained items, no style, etc
- Sort items in a pivot filter. Standard Excel capability only lets you sort items if they are in rows or columns not in a filter
- Delete all custom styles. It amazing how many junk styles spreadsheets can accrue, especially when copying in data from other spreadsheets
- Resize and reposition all comments. I swear comments have a mind of their own, constantly moving to bizarre places.
- Print in a Userform all external links and whether the links are active. Including those in name manager and in pivot tables that don't show up in the 'Edit links' window.
- Print in a Userform all HIDDEN name manger names. As a company we need to be careful about what is exposed when we publish spreadsheets.
These (and more I've not mentioned) save me countless hours during a normal working week!
Thanks for a great podcast. Really useful tips on customisation. The tip on only one sheet instead of three - using that now myself.
Personally I use customisation for two main purposes. Quick access to functions I use regularly – to state the obvious – but also some functions I use so infrequently I may not be able to quickly find them when I need them. Forms, for example.
And if I ever need to use a function or command that I have recently learned or used in a new or different way, I add that to the Quick Access Ribbon.
Hi Chandoo,
On top all those customization you've mentioned, I also use the Custom UI Editor for Microsoft Office to create my own Ribbon menu buttons in Excel 2007 and hide the default ones. With the help of macros of course, this makes Excel looks and behave like an App.
Try that to impress your boss !
Chandoo,
Until recently, I had only created custom VBA to solve specific problems related to work. I usually placed a shortcut in a new ribbon. Now I am going to use some of the tips that you mentioned to customize one ribbon for all of the common items that I use (like filter, sort, number format, etc.)
Thank you.
Hi Chandoo,
I really like your podcast. I will appreciate if you continue to do podcast in the future.
Regarding my customize of excel, I usually keep lot of commands in Quick Access Toolbars (QAT), esp, insert/delete sheet row, insert/delete sheet column,copy, cut, format copying, paste, paste special, paste value, Font color, Fill color, camera tool and open recent file etc. Also I click on click on Developer tab so that it is visible on my tabs.
When I was studying MBA, I used to do add-ins of Analysis Toolpak but I have not used that Toolpak since I completed MBA.
Thanking you,
Sam
Hi Chandoo,
I really like your page and it's the first time I listen your podcast and it's great!!. I use a lot the Quick Access Toolbar and also use personal macros for rutine task and for look-and-feel in corporate colors, but after listen you I will try to costumize the ribbon and also I will work with themes and styles.
Thanks to inspire us!!.
Regards from Mexico.
Uriel
Thank you Chandoo, very useful.
I have done 3 things to customize my excel,
Created a new tab and put in it all my frequently used commands.
Recorded all my repeated activities as macros and I am running this everyday.
Added the commands I use very very frequently (including the recorded macros) to the QAT.
Thank you again
Hi Chandoo,
Great podcast. I usually do the following to customize my Excel:
1) I use custom themes and chart & slicer templates
2) Custom macros in QAT and Ribbon for repetitive tasks
3) Keep generic VBA routines in a module for use when needed for specific workbooks, I can just copy it into the target workbook.
Thanks,
Dave
Hi Chandoo,
I have been using the quick access toolbar and it is great for having frequently used features all in one place. As well as macros and those less commonly known features, such as select visable cells when working with hidden rows/columns. The list of all commands available to add to the toolbar is mind numbing.
I did not know about adding your own tab to the ribbon. I have already begun contructing my own.
Thank you for the wonderful information.
Chandoo,
I mainly use the personal macros. There are a few charts that I update frequently, this requires that I keep the old data and change the range of the chart. Changing the range causes Excel to pick all new colors for my chart. So, one macro reverses this issue.
Thanks for sharing your awesomeness.
My customization:
I have three add-ins: Macabacus light for shortcuts (free), XL Campus to work with lots of tabs and the Tableau reshaper add-in (free), to reshape tables in database form.
I have created and copied macros for:
Clean formats
Search and select constants
Format as constant (I used to do financial modeling)
Trace dependents simultaneously
Center across selection (not used anymore since it's in one of the Add-ins)
Search and select blanks cells
Select cell A1 in every sheet (before closing the file)
Protect and unprotect sheets and workbook
Almost all macros have shortcuts and a dedicated tab in the ribbon.
As for Excel options themselves:
Automatic calculations
Error tracking disabled
Cursor stays in same cell when Enter is pressed
And I used to have a Financial modeling template as a predefined sheet where different formats and styles were pre-established
Dear chandoo
Thanks for the excellent podcast. I regularly visit your website and have listened to all your podcast which are very informative. I customise my toolbar by using a quick access and inserting icons in toolbar.
i used all of you suggestions, but have refrained from pinning files to the Recent Workbook List. It bothered me that this pinned files also took over the keybord shortcuts for the last opened files. If I press ALT-F+1, i want to open the last used file, not the file i pinned first.
I missed a very powerful Excel customization option in your podcast, which i use every day and saves me hours: custom keyboard shortcuts. There are two of them:
1. Assign a Key combination to a macro (e.g. "Ctrl-Shift-V" for my VBA-procedure "PasteSpecial_Values")
-> Open the Macro-dialog (Alt-F8) and go to Options, set the key...
2. Assign a Key combination even to F-Keys (e.g. "F5" for "my_favorite_Macro")
-> Open VBA-Editor (Alt-F11), go to any Module in your Personal.xlsb and add this code:
Sub auto_open()
Application.OnKey "{F5}", "my_favorite_Macro"
End Sub
There is no quicker way to call your macro!
Hi Chandoo, very excellent podcast.
I use the quick access toolbar to link my VBA macro's and at the moment I'm experimenting on adding a personal ribbon tab with personal ribbon buttons. I use a Custom UI Editor to do this, it let me link macro's to the buttons used in the personal ribbontab.
This way for a project dashboard I can add the buttons necessary there and they are attached to the file. So other people opening the file have the same ribbon tab. Looking professional and to quote 'awesome' ;-).
Thanks for your prodcast.
I customize my excel in the ribbon. This allows to feature the items I need
Hi Chandoo,
Would you please link me to your Excel Customization Handbook? I am sure that this will help me in a huge way!
Hi Chandoo!
I would love an Excel Customization Handbook! Here is my tip:
To recreate the CTRL-HOME functionality on Excel for Mac copy and paste the following code into your personal macro workbook. I assigned my code to the hotkey Option-Cmd-G and now it's like I have a "Home" button on my Mac!
----------
Sub GoHome()
'
' GoHome Macro
' Simulates Ctrl-Home on a PC
'
' Keyboard Shortcut: Option+Cmd+g
If ActiveSheet.Type = xlWorksheet Then
With ActiveWindow
.ScrollRow = 1
.ScrollColumn = 1
.ActivePane.VisibleRange.Cells(1).Select
End With
End If
End Sub