Calculate distance between two addresses or coordinates - Excel VBA (2024)

Ever wanted to calculate the distance between two addresses in Excel? I recently had the followingissue: from a list of over approx. 50 administration offices across my city I wantedto find the one that is closest to my workplace. Of course open Google Maps and type each location one by one… and then choose the shortest connection. By why bother when we have Google Maps Distance Matrix API!!!

Upload an Excel file with addresses to calculate distances using my API Service here

Using the Google Maps Distance Matrix API

Google has a lot of useful API out there and I encourage you to go sometime to the Google API Explorer and have a look at what other information you can easily utilize from Excel or your other applications.

Let’s however focus on getting the distance between two addresses. Google facilitates Google Maps Distance Matrix API for limited usage. The API is configured using GET HTTP Params. A simple example below. Say we want to get the distance between San Francisco and Victoria BC. We want to get there by bicycle. Copy this link into your browser:

https://maps.googleapis.com/maps/api/distancematrix/json?origins=Vancouver+BC|Seattle&destinations=San+Francisco|Victoria+BC&mode=bicycling&language=en

Google Distance Matrix Builder

Want to quickly test the Google API? Below a simple form for building a quick Distance URL. Simply type in the From an To addresses, select the transportation mode and hit Build URL!. Go here for more options for configuring the Google Maps Distance Matrix API.

From:
To:
Mode:

Google Maps Distance Matrix URL:

Calculate distance between two addresses using Google Maps in Excel

So I knocked up quickly this VBA Function in Excel which uses Google API distance matrix function to calculate the Google Maps distance. Be sure to first replace YOUR_KEY with your personal API key obtained from here. See the VBA code here:

Get Google Maps distance in meters

'Calculate Google Maps distance between two addressesPublic Function GetDistance(start As String, dest As String) Dim firstVal As String, secondVal As String, lastVal As String firstVal = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=" secondVal = "&destinations=" lastVal = "&mode=car&language=pl&sensor=false&key=YOUR_KEY" Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") URL = firstVal & Replace(start, " ", "+") & secondVal & Replace(dest, " ", "+") & lastVal objHTTP.Open "GET", URL, False objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" objHTTP.send ("") If InStr(objHTTP.responseText, """distance"" : {") = 0 Then GoTo ErrorHandl Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = """value"".*?([0-9]+)": regex.Global = False Set matches = regex.Execute(objHTTP.responseText) tmpVal = Replace(matches(0).SubMatches(0), ".", Application.International(xlListSeparator)) GetDistance = CDbl(tmpVal) Exit FunctionErrorHandl: GetDistance = -1End Function

Get Google Maps duration (in seconds)

Public Function GetDuration(start As String, dest As String) Dim firstVal As String, secondVal As String, lastVal As String firstVal = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=" secondVal = "&destinations=" lastVal = "&mode=car&language=en&sensor=false&key=YOUR_KEY" Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") URL = firstVal & Replace(start, " ", "+") & secondVal & Replace(dest, " ", "+") & lastVal objHTTP.Open "GET", URL, False objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" objHTTP.send ("") If InStr(objHTTP.responseText, """duration"" : {") = 0 Then GoTo ErrorHandl Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = "duration(?:.|\n)*?""value"".*?([0-9]+)": regex.Global = False Set matches = regex.Execute(objHTTP.responseText) tmpVal = Replace(matches(0).SubMatches(0), ".", Application.International(xlListSeparator)) GetDuration = CDbl(tmpVal) Exit FunctionErrorHandl: GetDuration = -1End Function

Calculate distance between two coordinates

You can calculate the distance between two coordinates (2 pairs of latitudes and longitudes) using either Google’s API or a simple VBA Function.

Calculate distance between coordinates using a VBA function

Taking into account the elliptic nature of Mother Earth you can easily calculate the distance between coordinates without using Google API .

Warning – no the world is not flat as opposed to what the Flat Earch Society is stating

The function returns the distance and using the unit variable you can state if you want the function to return the distance in Kilometres ("K"), Miles ("M") or even nautical miles ("N").

Public Function GetDistanceCoord(ByVal lat1 As Double, ByVal lon1 As Double, ByVal lat2 As Double, ByVal lon2 As Double, ByVal unit As String) As Double Dim theta As Double: theta = lon1 - lon2 Dim dist As Double: dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta)) dist = WorksheetFunction.Acos(dist) dist = rad2deg(dist) dist = dist * 60 * 1.1515 If unit = "K" Then dist = dist * 1.609344 ElseIf unit = "N" Then dist = dist * 0.8684 End If GetDistanceCoord= distEnd FunctionFunction deg2rad(ByVal deg As Double) As Double deg2rad = (deg * WorksheetFunction.Pi / 180#)End FunctionFunction rad2deg(ByVal rad As Double) As Double rad2deg = rad / WorksheetFunction.Pi * 180#End Function

Calculate distance between coordinates using Google Maps in Excel

To get Google Maps distance between two coordinates simply use the same GetDistance function as above and replace the start and dest parameters with the coordinates in this format:

41.43216,-81.49992

Final call example:

Debug.Print GetDistance("41.43206,-81.38992", "41.43216,-81.49992")

Same goes for the duration function:

Debug.Print GetDuration("41.43206,-81.38992", "41.43216,-81.49992")

How to set it up in Excel?

Important: Please remember that you need a direct Internet connection! Not via proxy etc.
Follow the steps:

Add new VBA Module

Go to the DEVELOPER ribbon and add select Visual Basic a and new Module to your VBA Project

Insert the VBA code

Insert the code from sections above (notice that the function is “Public” – therefore will be visible in your workbook as a so called UDF (User Defined Function)

Input the function in Excel

Go to the worksheet and input the function as shown below:

=GetDistance("Chicago"; "New York")

Make sure to replace ; with your default formula list separator (e.g. comma in the US)!

Calculate distance using Google Maps between any number of coordinates/addresses in Excel

Now that we know how to leverage our newly learned GetDistance and GetDuration functions we can use them to measure the distance/duration for any routes, with any coordinates/addresses in between our starting point and our destination. For this I created 2 simple procedures MultiGetDistance and MultiGetDuration:

Get distance between any number of locations

By using our GetDistance function we can get the distance between any number of locations using the Visual Basic procedure below:

Public Function MultiGetDistance(ParamArray args() As Variant) As Double MultiGetDistance = 0 Dim startLoc As String, endLoc As String, i As Long For i = LBound(args) To UBound(args) - 1 startLoc = args(i): endLoc = args(i + 1) MultiGetDistance = MultiGetDistance + GetDistance(startLoc, endLoc) Next iEnd Function

Below example usage:

=MultiGetDistance("Chicago";"New York";"San Jose")

And here is the output:

Get duration between any number of locations

Similarly by using our GetDuration function we can get the duration between any number of locations using the Visual Basic procedure below:

Public Function MultiGetDuration(ParamArray args() As Variant) As Double MultiGetDuration = 0 Dim startLoc As String, endLoc As String, i As Long For i = LBound(args) To UBound(args) - 1 startLoc = args(i): endLoc = args(i + 1) MultiGetDuration = MultiGetDuration + GetDuration(startLoc, endLoc) Next iEnd Function

Below example usage:

=MultiGetDuration("Chicago";"New York";"San Jose")

Parameters for calculating the Google Maps Distance

The following parameters are available in the API query:

ParamDescription
keyYour application’s API key. This key identifies your application for purposes of quota management. Learn how to get a key from the Google Developers Console.
mode(defaults to driving) — Specifies the mode of transport to use when calculating distance. Valid values and other request details are specified in the Travel Modes section of this document. Other modes:
  • driving (default) for road network.
  • walking for pedestrian paths & sidewalks (where available).
  • bicycling for bicycling via bicycle paths & preferred streets (where available).
  • transit for public transit routes (where available).
languageThe language in which to return results. See list here
avoidRestrictions to the route. Available:
  • avoid=tolls
  • avoid=highways
  • avoid=ferries
unitsUnit system to use when expressing distance as text. Available:
  • units=metric (fordistances in kilometers and meters)
  • units=imperial

For other parameters see the original Google Distance Matrix API page:
The Google Distance Matrix API

Limits and common issues

Read more on the limitations of the Google Distance Matrix API here:
The Google Distance Matrix API

Google limits the amount of free queries to the following:

  • 100 elements per query.
  • 100 elements per 10 seconds.
  • 2 500 elements per 24 hour period.

There is a way around these limitation via the use of HTTP Proxies. Read more here.

So beware of any mass recalculation of these functions as you may quickly find yourself exceeding these limits.

Is the function returning -1 or simply not working properly? Be sure you have a direct Internet connection! The XMLHttpRequest Object above is not configured to handle proxy servers common for Office environments.

Common issues

The functions above are not full proof and don’t take into account:

  • Be sure to obtain a Google Distance Matrix Key!
  • In case of errors be sure to check if you are sitting behind a proxy server. If so check here how to configure a proxy
  • That Google won’t find the exact addresses and will approximate with a similar address (see component filtering for more precision)
  • That Google might return several matches. While the function takes the first one from the returned list
  • HTTP or timeouts. See my Web Scraping Kit for how I dealt with such
  • That distances/duration differ depending on which location is set as origin and which is set as destination (one way roads, detours etc.)

Having trouble with matching a large dataset with distances and durations? Reach out for a free quote.

Download an example

You can download an example of the above below and support AnalystCave.com:
https://analystcave.com/product/google-maps-distance-example/

Does not work on MAC! – The VBA code is specific and native only to Windows

Help!

Need help with calculating the distance between two addresses using the approach above? Feel free to comment below or ask a new Question via Questions page.

Next steps

Want to get the geolocation (coordinates) of any address?
Excel: Get geolocation (coordinates) of any address
Want to add maps and other cool Google Charts in Excel?
Excel: Google Charts Tool
Want to use Google translate in Excel?
Excel: Google Translate functionality

Related posts:

  • Excel Count Cells with Text and Formula - Excel Stats
  • Excel Camera Tool - create an Image snapshot in Excel
  • Excel VBA Find - Values, Formulas, Comments in Excel
  • Excel UDF Tutorial - How to write Custom Excel Functions
  • Excel LAMBA Function - Create your own Excel Functions!
Calculate distance between two addresses or coordinates - Excel VBA (2024)
Top Articles
How to calculate the distance between two points. YouTube Lesson, interactive demonstration, with practice worksheet
Distance Formula - Derivation, Examples | All Distance Formulas in Maths
St Thomas Usvi Craigslist
Hotels
The UPS Store | Ship & Print Here > 400 West Broadway
Le Blanc Los Cabos - Los Cabos – Le Blanc Spa Resort Adults-Only All Inclusive
Nc Maxpreps
Alpha Kenny Buddy - Songs, Events and Music Stats | Viberate.com
Khatrimaza Movies
Soap2Day Autoplay
Heska Ulite
Carter Joseph Hopf
All Obituaries | Ashley's J H Williams & Sons, Inc. | Selma AL funeral home and cremation
How Many Cc's Is A 96 Cubic Inch Engine
Sports Clips Plant City
No Hard Feelings Showtimes Near Cinemark At Harlingen
Lesson 8 Skills Practice Solve Two-Step Inequalities Answer Key
Tnt Forum Activeboard
Uconn Health Outlook
Lakewood Campground Golf Cart Rental
Amazing Lash Studio Casa Linda
Обзор Joxi: Что это такое? Отзывы, аналоги, сайт и инструкции | APS
Skycurve Replacement Mat
10 Best Places to Go and Things to Know for a Trip to the Hickory M...
Www Mydocbill Rada
Gncc Live Timing And Scoring
A Plus Nails Stewartville Mn
Gridwords Factoring 1 Answers Pdf
6465319333
After Transmigrating, The Fat Wife Made A Comeback! Chapter 2209 – Chapter 2209: Love at First Sight - Novel Cool
Fandango Pocatello
Sports Clips Flowood Ms
Poster & 1600 Autocollants créatifs | Activité facile et ludique | Poppik Stickers
Sitting Human Silhouette Demonologist
Consume Oakbrook Terrace Menu
Baywatch 2017 123Movies
Myql Loan Login
Dinar Detectives Cracking the Code of the Iraqi Dinar Market
814-747-6702
Ehome America Coupon Code
Portal Pacjenta LUX MED
St Vrain Schoology
Conan Exiles Colored Crystal
Syrie Funeral Home Obituary
Lightfoot 247
Hsi Delphi Forum
Skyward Login Wylie Isd
Mkvcinemas Movies Free Download
Optimal Perks Rs3
Grace Charis Shagmag
Lsreg Att
Syrie Funeral Home Obituary
Latest Posts
Article information

Author: Chrissy Homenick

Last Updated:

Views: 5333

Rating: 4.3 / 5 (54 voted)

Reviews: 85% of readers found this page helpful

Author information

Name: Chrissy Homenick

Birthday: 2001-10-22

Address: 611 Kuhn Oval, Feltonbury, NY 02783-3818

Phone: +96619177651654

Job: Mining Representative

Hobby: amateur radio, Sculling, Knife making, Gardening, Watching movies, Gunsmithing, Video gaming

Introduction: My name is Chrissy Homenick, I am a tender, funny, determined, tender, glorious, fancy, enthusiastic person who loves writing and wants to share my knowledge and understanding with you.