Determine if map coordinates are within area

EvonS

Board Regular
Joined
Jun 1, 2016
Messages
111
Office Version
  1. 365
Platform
  1. Windows
  2. Web
I have this information below that define areas on a map. Is there a way to determine if a longitude and latitude are within one of these areas?

OBJECTIDAGENCYDIVUNIT_NAMEADDRESSCITYAREA_SQKMShape__AreaShape__Length
1​
Toronto Police ServiceD1111 Division2054 Davenport RdToronto
18.67845803​
35692935.07​
28190.11106​
2​
Toronto Police ServiceD1212 Division200 Trethewey DrToronto
24.78034332​
47417573.68​
33029.13457​
3​
Toronto Police ServiceD1313 Division1435 Eglinton Av WToronto
18.60191063​
35591722.93​
24616.57917​
4​
Toronto Police ServiceD1414 Division350 Dovercourt RdToronto
14.17525415​
27083979.14​
30017.70564​
5​
Toronto Police ServiceD2222 Division3699 Bloor St WToronto
68.12188386​
130097609.1​
72765.03189​
6​
Toronto Police ServiceD2323 Division5230 Finch Av WToronto
57.64228008​
110369052.3​
54270.05361​
7​
Toronto Police ServiceD3131 Division40 Norfinch DrToronto
42.66749447​
81789149.85​
44477.14656​
8​
Toronto Police ServiceD3232 Division30 Ellerslie AvToronto
61.06048027​
117079222.9​
43658.49725​
9​
Toronto Police ServiceD3333 Division50 Upjohn RdToronto
52.7888815​
101244281.9​
45148.84874​
10​
Toronto Police ServiceD4141 Division2222 Eglinton Av EToronto
44.57511239​
85395988.8​
58875.05415​
11​
Toronto Police ServiceD4242 Division242 Milner Av EToronto
84.61174885​
162528804.9​
59824.09155​
12​
Toronto Police ServiceD4343 Division4331 Lawrence Av EToronto
59.37000474​
113873893.7​
54424.50711​
13​
Toronto Police ServiceD5151 Division51 Parliament StToronto
8.601682841​
16437802.1​
25324.5062​
14​
Toronto Police ServiceD5252 Division255 Dundas St WToronto
9.228055772​
17625448.21​
35966.54447​
15​
Toronto Police ServiceD5353 Division75 Eglinton Av WToronto
31.29485302​
59895251.81​
37395.46015​
16​
Toronto Police ServiceD5555 Division101 Coxwell AvToronto
41.03398633​
78486159.8​
82307.80296​
 
I believe that comment pertained to pulling shapefile information from the website into Power Query for further processing. If that is the case, you would still need an algorithm to evaluate whether user-inputted latitude-coordinates fell within the geographical boundaries of any of the TPS Divisions, and if so, which one. Quick update: I've already done the former--I pulled the shapefiles into PQ (although I didn't use the scraping feature...I manually downloaded the shapefile archive and processed it in PQ). Processing involved extracting the polygon descriptions for each division (i.e., lat-long coordinates for vertices of each cyclic polygon). After appending all of them together, along with a separate column to identify which division the coordinates belong to, the worksheet is over 24,000 rows. I've used those shapefile coordinates to construct bounding boxes for each division so that, given input lat-long coordinates, we can quickly determine which few divisions might contain the point of interest, while ruling out all other divisions. I'm currently looking into some approaches for examining each of the remaining possibilities to assess whether the point of interest lies within its boundaries. I'll post back with a link to the file after I make some more progress on this last step.
Some time ago, I created a VBA function (can be used as a user defined function on a worksheet) that tells whether a point is inside or outside of a given polygon. Within the thread of replies, I responded to someone's question regarding multiple polygons. Here is a link to my old mini-blog article (in case you wanted to appropriate the algorithm)...
Test Whether A Point Is In A Polygon Or Not
 
Last edited:
Upvote 0

Excel Facts

Excel motto
Not everything I do at work revolves around Excel. Only the fun parts.
Thanks, Rick. That's very helpful. I was looking into the approach you've described...the ray casting/crossing number method; and also considering a "winding number" approach (which I don't quite understand yet). But I really like the idea of incorporating the UDF you've described.
 
Upvote 0
Thanks, Rick. That's very helpful. I was looking into the approach you've described...the ray casting/crossing number method; and also considering a "winding number" approach (which I don't quite understand yet). But I really like the idea of incorporating the UDF you've described.
Now you all have completely lost me. I hope I'm able to implement whatever solution you all come up with.
 
Upvote 0
@KRice, I was thinking about ray casting as a way to determine whether a point is in a polygon. I think Rick's algorithm will be fine for the OP, but I started thinking about odd shaped polygons and how that would work. Think that would be a good way to do it.

Also, also....

I can't mess with it now, I'm at work and can't install.

But I found this Excel Add-In that looks very promising.

MapWinGIS

They have a GitHub repo here.

Should be able to use that without coming up with a bespoke ray casting algorithm.
 
Upvote 0
@KRice, I was thinking about ray casting as a way to determine whether a point is in a polygon. I think Rick's algorithm will be fine for the OP, but I started thinking about odd shaped polygons and how that would work. Think that would be a good way to do it.

Also, also....

I can't mess with it now, I'm at work and can't install.

But I found this Excel Add-In that looks very promising.

MapWinGIS

They have a GitHub repo here.

Should be able to use that without coming up with a bespoke ray casting algorithm.
I guarantee that my function will work no matter what the shape of the polygon is. It was extensively test back when I created it.
 
Upvote 0
I think Rick's function is working great. Here's a snippet of the functional worksheet where the user inputs lat-long coordinates, or perhaps this would be where an address input by the user is converted to lat-long coordinates. For the example, I chose coordinates near the northwest corner of Div 13. A quick comparison of the input coordinates to each division's bounding box identifies potential divisions that might include the point of interest. Then Rick's function is called to interrogate each of those potential divisions. All of the polygon coordinates are located on the TPS_AllDivs worksheet and the appropriate subsets are extracted with the FILTER function.
Cell Formulas
RangeFormula
B4B4=INDEX(G9#,MATCH("In Polygon",$H$9:$H$25,0))
C4C4=INDEX(Table_TPS_Police_Divisions_Top[Column1.properties.ADDRESS],MATCH(IF(LEFT(B4,3)="D52","D52",B4),Table_TPS_Police_Divisions_Top[Column1.properties.DIV],0))
A9:A25A9=UNIQUE(Table_TPS_AllDivs[Division])
B9:B25B9=MIN(FILTER(FILTER(Table_TPS_AllDivs,Table_TPS_AllDivs[Division]=LocationDivision!$A9),Table_TPS_AllDivs[#Headers]="Longitude"))
C9:C25C9=MAX(FILTER(FILTER(Table_TPS_AllDivs,Table_TPS_AllDivs[Division]=LocationDivision!$A9),Table_TPS_AllDivs[#Headers]="Longitude"))
D9:D25D9=MIN(FILTER(FILTER(Table_TPS_AllDivs,Table_TPS_AllDivs[Division]=LocationDivision!$A9),Table_TPS_AllDivs[#Headers]="Latitude"))
E9:E25E9=MAX(FILTER(FILTER(Table_TPS_AllDivs,Table_TPS_AllDivs[Division]=LocationDivision!$A9),Table_TPS_AllDivs[#Headers]="Latitude"))
G9:G10G9=LET(potdivs,($B$3>=$D$9:$D$25)*($B$3<=$E$9:$E$25)*($B$2>=$B$9:$B$25)*($B$2<=$C$9:$C$25),FILTER(A9#,potdivs=1))
H9:H25H9=IF(G9<>"",IF(@PtInPoly(B$2,B$3,FILTER(Table_TPS_AllDivs[[Longitude]:[Latitude]],Table_TPS_AllDivs[Division]=LocationDivision!G9)),"In Polygon","Not in Polygon"),"")
Dynamic array formulas.
Named Ranges
NameRefers ToCells
TPS_AllDivs!ExternalData_18=TPS_AllDivs!$A$1:$D$24438B9:E25


The shapefile coordinates on the TPS_AllDivs worksheet look like this...only the first few rows shown:
TPS_Police.xlsm
ABCD
1DivisionLongitudeLatitudeIndex
2D11-79.4491290743.667538731
3D11-79.4490186443.667269492
4D11-79.4489056743.667282093
5D11-79.4487955943.667291054
6D11-79.4486859143.66730455
7D11-79.4485758343.667313456
TPS_AllDivs


Code for the UDF, compliments of @Rick Rothstein from the link he posted above:
VBA Code:
Option Explicit

Public Function PtInPoly(Xcoord As Double, Ycoord As Double, Polygon As Variant) As Variant
  Dim x As Long, m As Double, b As Double, Poly As Variant
  Dim LB1 As Long, LB2 As Long, UB1 As Long, UB2 As Long, NumSidesCrossed As Long
  Poly = Polygon
  If Not (Poly(LBound(Poly), 1) = Poly(UBound(Poly), 1) And _
        Poly(LBound(Poly), 2) = Poly(UBound(Poly), 2)) Then
    If TypeOf Application.Caller Is Range Then
      PtInPoly = "#UnclosedPolygon!"
    Else
      Err.Raise 998, , "Polygon Does Not Close!"
    End If
    Exit Function
  ElseIf UBound(Poly, 2) - LBound(Poly, 2) <> 1 Then
    If TypeOf Application.Caller Is Range Then
      PtInPoly = "#WrongNumberOfCoordinates!"
    Else
      Err.Raise 999, , "Array Has Wrong Number Of Coordinates!"
    End If
    Exit Function
  End If
  For x = LBound(Poly) To UBound(Poly) - 1
    If Poly(x, 1) > Xcoord Xor Poly(x + 1, 1) > Xcoord Then
      m = (Poly(x + 1, 2) - Poly(x, 2)) / (Poly(x + 1, 1) - Poly(x, 1))
      b = (Poly(x, 2) * Poly(x + 1, 1) - Poly(x, 1) * Poly(x + 1, 2)) / (Poly(x + 1, 1) - Poly(x, 1))
      If m * Xcoord + b > Ycoord Then NumSidesCrossed = NumSidesCrossed + 1
    End If
  Next
  PtInPoly = CBool(NumSidesCrossed Mod 2)
End Function
The full file I used is here:
Eventually, more complete addresses or other details will probably be necessary in the final step where a division's address is pulled over from the top-level division lookup table (similar to the first table posted by the OP).

P.S. One more note: I noticed that Div 52 seems to have two separate polygon descriptions. I think that division may consist of two different land masses...one connected to the mainland, the other an island?...I don't know. In any case, I arbitrarily denoted these as D52A and D52B, so when the final lookups are done, I needed to map both of these back to simply "D52".
 
Upvote 0
Here is a way to get Latitude and Longitude from the address info.

I inserted blank columns for Latitude and Longitude before running the code.

VBA Code:
Function RX(s() As String)
Dim Res() As Double:    ReDim Res(1 To UBound(s), 1 To 2)
Dim MX As Object

With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "<strong>(\d+\.\d+),\s(\-?\d+\.\d+)<\/strong>"
    For i = 1 To UBound(s)
        Set MX = .Execute(s(i))(0).subMatches
        Res(i, 1) = MX(0)
        Res(i, 2) = MX(1)
    Next i
End With

RX = Res
End Function

Sub Address2LatLong()
Dim r As Range:         Set r = Range("E2:F" & Range("E" & Rows.Count).End(xlUp).Row)
Dim AR() As Variant:    AR = r.Value2
Dim URLS() As String:   ReDim URLS(1 To UBound(AR))
Dim http As Object:     Set http = CreateObject("MSXML2.XMLHTTP")
Dim Result() As Double

For i = 1 To UBound(AR)
    URLS(i) = "http://geocoder.ca/?locate=" & Replace(AR(i, 1), " ", "+") & "%2c+" & AR(i, 2) & "%2c+Ontario&geoit=GeoCode+it!"
Next i

With http
    For j = 1 To UBound(URLS)
        .Open "GET", URLS(j), False
        .Send
        URLS(j) = .ResponseText
    Next j
End With

Result = RX(URLS)
r.Offset(, 2).Value = Result

End Sub

GetCoords.xlsm
ABCDEFGHIJK
1OBJECTIDAGENCYDIVUNIT_NAMEADDRESSCITYLatitudeLongitudeAREA_SQKMShape__AreaShape__Length
21Toronto Police ServiceD1111 Division2054 Davenport RdToronto43.671071-79.46082518.6784580335692935.0728190.11106
32Toronto Police ServiceD1212 Division200 Trethewey DrToronto43.69457914-79.4868758124.7803433247417573.6833029.13457
43Toronto Police ServiceD1313 Division1435 Eglinton Av WToronto43.69832725-79.4366830218.6019106335591722.9324616.57917
54Toronto Police ServiceD1414 Division350 Dovercourt RdToronto43.651297-79.42597814.1752541527083979.1430017.70564
65Toronto Police ServiceD2222 Division3699 Bloor St WToronto43.64271515-79.530180268.12188386130097609.172765.03189
76Toronto Police ServiceD2323 Division5230 Finch Av WToronto43.743866-79.58352257.64228008110369052.354270.05361
87Toronto Police ServiceD3131 Division40 Norfinch DrToronto43.75675-79.52747442.6674944781789149.8544477.14656
98Toronto Police ServiceD3232 Division30 Ellerslie AvToronto43.7717196-79.4150839361.06048027117079222.943658.49725
109Toronto Police ServiceD3333 Division50 Upjohn RdToronto43.751082-79.35006952.7888815101244281.945148.84874
1110Toronto Police ServiceD4141 Division2222 Eglinton Av EToronto43.730805-79.2771144.5751123985395988.858875.05415
1211Toronto Police ServiceD4242 Division242 Milner Av EToronto43.7893-79.2399384.61174885162528804.959824.09155
1312Toronto Police ServiceD4343 Division4331 Lawrence Av EToronto43.77082674-79.1740534259.37000474113873893.754424.50711
1413Toronto Police ServiceD5151 Division51 Parliament StToronto43.651951-79.3621428.60168284116437802.125324.5062
1514Toronto Police ServiceD5252 Division255 Dundas St WToronto43.654209-79.3897189.22805577217625448.2135966.54447
1615Toronto Police ServiceD5353 Division75 Eglinton Av WToronto43.70606-79.40066231.2948530259895251.8137395.46015
1716Toronto Police ServiceD5555 Division101 Coxwell AvToronto43.66918-79.31729941.0339863378486159.882307.80296
Sheet1
 
Upvote 0
@lrobbo314, that's great. I was just looking into an alternative approach using Google's Geocode API and managed to get it working with the WEBSERVICE function and then extracting the lat and long from the result. Obviously, the output from WEBSERVICE should be hidden (see the long output on row 5). To use this approach, the user needs to subscribe to Googles API service and obtain an API key from them (I've overwritten mine in the formula below, but indicated where it goes). Lookups are free up to so many thousands per month, I believe...but the terms and conditions should be reviewed carefully because there may be financial implications of using, or heavily using, the service.

For a quick tutorial on how to get started with this...
And then several other videos from Frédéric Le Guen provide help with additional details.
TPS_Police.xlsm
NOP
1from Google Geocode API
2known coords of address…"lat": 43.6983134
3Try to find them with API"lng": -79.4366764
4input address -->1435 Eglinton Av W, Toronto
5<?xml version="1.0" encoding="UTF-8"?> <GeocodeResponse> <status>OK</status> <result> <type>premise</type> <formatted_address>1435 Eglinton Ave W, York, ON M6C 3Z4, Canada</formatted_address> <address_component> <long_name>1435</long_name> <short_name>1435</short_name> <type>street_number</type> </address_component> <address_component> <long_name>Eglinton Avenue West</long_name> <short_name>Eglinton Ave W</short_name> <type>route</type> </address_component> <address_component> <long_name>York</long_name> <short_name>York</short_name> <type>political</type> <type>sublocality</type> <type>sublocality_level_1</type> </address_component> <address_component> <long_name>Toronto</long_name> <short_name>Toronto</short_name> <type>locality</type> <type>political</type> </address_component> <address_component> <long_name>Toronto</long_name> <short_name>Toronto</short_name> <type>administrative_area_level_3</type> <type>political</type> </address_component> <address_component> <long_name>Toronto</long_name> <short_name>Toronto</short_name> <type>administrative_area_level_2</type> <type>political</type> </address_component> <address_component> <long_name>Ontario</long_name> <short_name>ON</short_name> <type>administrative_area_level_1</type> <type>political</type> </address_component> <address_component> <long_name>Canada</long_name> <short_name>CA</short_name> <type>country</type> <type>political</type> </address_component> <address_component> <long_name>M6C 3Z4</long_name> <short_name>M6C 3Z4</short_name> <type>postal_code</type> </address_component> <geometry> <location> <lat>43.6983134</lat> <lng>-79.4366764</lng> </location> <location_type>ROOFTOP</location_type> <viewport> <southwest> <lat>43.6969645</lat> <lng>-79.4380371</lng> </southwest> <northeast> <lat>43.6996624</lat> <lng>-79.4353391</lng> </northeast> </viewport> <bounds> <southwest> <lat>43.6981387</lat> <lng>-79.4369419</lng> </southwest> <northeast> <lat>43.6984559</lat> <lng>-79.4364343</lng> </northeast> </bounds> </geometry> <partial_match>true</partial_match> <place_id>ChIJywHLYZczK4gR1fe4wMYoidM</place_id> </result> </GeocodeResponse>
6output -->lat43.6983134
7long-79.4366764
LocationDivision
Cell Formulas
RangeFormula
O5O5=WEBSERVICE("https://maps.googleapis.com/maps/api/geocode/xml?address="&O4&"&key=YOUR API KEY HERE")
P6P6=FILTERXML(O5,"//location/lat")
P7P7=FILTERXML(O5,"//location/lng")

Still, I prefer the code approach offered by @lrobbo314 for doing this.
 
Upvote 0
That's cool, @KRice. I remember when you could use the google maps API without a product key. Those were the days.

Totally forget about the WEBSERVICE function too.

Here it is using that method.

This is using Excel 365 functions... Not sure what version the OP has.

GetCoords.xlsm
BCDEFGHIJK
1AGENCYDIVUNIT_NAMEADDRESSCITYLatitudeLongitudeAREA_SQKMShape__AreaShape__Length
2Toronto Police ServiceD1111 Division2054 Davenport RdToronto43.671071-79.46082518.6784580335692935.0728190.11106
3Toronto Police ServiceD1212 Division200 Trethewey DrToronto43.69457914-79.4868758124.7803433247417573.6833029.13457
4Toronto Police ServiceD1313 Division1435 Eglinton Av WToronto43.69832725-79.4366830218.6019106335591722.9324616.57917
5Toronto Police ServiceD1414 Division350 Dovercourt RdToronto43.651297-79.42597814.1752541527083979.1430017.70564
6Toronto Police ServiceD2222 Division3699 Bloor St WToronto43.64271515-79.530180268.12188386130097609.172765.03189
7Toronto Police ServiceD2323 Division5230 Finch Av WToronto43.743866-79.58352257.64228008110369052.354270.05361
8Toronto Police ServiceD3131 Division40 Norfinch DrToronto43.75675-79.52747442.6674944781789149.8544477.14656
9Toronto Police ServiceD3232 Division30 Ellerslie AvToronto43.7717196-79.4150839361.06048027117079222.943658.49725
10Toronto Police ServiceD3333 Division50 Upjohn RdToronto43.751082-79.35006952.7888815101244281.945148.84874
11Toronto Police ServiceD4141 Division2222 Eglinton Av EToronto43.730805-79.2771144.5751123985395988.858875.05415
12Toronto Police ServiceD4242 Division242 Milner Av EToronto43.7893-79.2399384.61174885162528804.959824.09155
13Toronto Police ServiceD4343 Division4331 Lawrence Av EToronto43.77082674-79.1740534259.37000474113873893.754424.50711
14Toronto Police ServiceD5151 Division51 Parliament StToronto43.651951-79.3621428.60168284116437802.125324.5062
15Toronto Police ServiceD5252 Division255 Dundas St WToronto43.654209-79.3897189.22805577217625448.2135966.54447
16Toronto Police ServiceD5353 Division75 Eglinton Av WToronto43.70606-79.40066231.2948530259895251.8137395.46015
17Toronto Police ServiceD5555 Division101 Coxwell AvToronto43.66918-79.31729941.0339863378486159.882307.80296
Sheet1
Cell Formulas
RangeFormula
G2:H17G2=TEXTSPLIT(TEXTBEFORE(TEXTAFTER(WEBSERVICE("http://geocoder.ca/?locate=" & SUBSTITUTE(E2," ","+")&"%2c+"&F2&"%2c+Ontario&geoit=GeoCode+it!"),"""ICBM"" content="""),""""),", ")+0
Dynamic array formulas.
 
Upvote 0
Those were the days, indeed! This last offering is really nice, @lrobbo314. I think that's even more convenient. The OP mentioned Excel 365 is being used, so there shouldn't be any impediments unless there are institutional restrictions on using VBA. Imagining that a form might involve entering just one address, a revised version of the file is available here:
In it, the user enters an address. Then your implementation of the WEBSERVICE function contacts a geocoding site to obtain the latitude-longitude coordinates. Those coordinates are compared to bounding boxes (upper and lower limits of latitude and longitude for a simple rectangle that surrounds each division's complex shape) to identify a reduced set of divisions that need to be be investigated further because the point of interest might lie within their geographical boundaries. Rick's Point-in-Polygon VBA offering then utilizes an edge-crossing algorithm to identify which division actually contains the point. Finally, the target division's address details are returned by formula. For the example, I identified an address near the southern tip of (but just inside) division 33's boundaries. That location lies near where 3 divisions intersect, and their shapes are such that all three divisions would need to be examined. In my testing so far, I haven't encountered any issues and the final results appear to be correct.
Cell Formulas
RangeFormula
E3:E19E3=UNIQUE(Table_TPS_AllDivs[Division])
F3:F19F3=MIN(FILTER(FILTER(Table_TPS_AllDivs,Table_TPS_AllDivs[Division]=LocationDivision!$E3),Table_TPS_AllDivs[#Headers]="Longitude"))
G3:G19G3=MAX(FILTER(FILTER(Table_TPS_AllDivs,Table_TPS_AllDivs[Division]=LocationDivision!$E3),Table_TPS_AllDivs[#Headers]="Longitude"))
H3:H19H3=MIN(FILTER(FILTER(Table_TPS_AllDivs,Table_TPS_AllDivs[Division]=LocationDivision!$E3),Table_TPS_AllDivs[#Headers]="Latitude"))
I3:I19I3=MAX(FILTER(FILTER(Table_TPS_AllDivs,Table_TPS_AllDivs[Division]=LocationDivision!$E3),Table_TPS_AllDivs[#Headers]="Latitude"))
K3:K5K3=LET(potdivs,($B$4>=$H$3:$H$19)*($B$4<=$I$3:$I$19)*($C$4>=$F$3:$F$19)*($C$4<=$G$3:$G$19),FILTER(E3#,potdivs=1))
B4:C4B4=TEXTSPLIT(TEXTBEFORE(TEXTAFTER(WEBSERVICE("http://geocoder.ca/?locate=" & SUBSTITUTE(B3," ","+")&"%2c+"&C3&"%2c+Ontario&geoit=GeoCode+it!"),"""ICBM"" content="""),""""),", ")+0
B5B5=INDEX(K3#,MATCH("In Polygon",$L$3:$L$19,0))
B6:C6B6=FILTER(Table_TPS_Police_Divisions_Top[[ADDRESS]:[CITY]],Table_TPS_Police_Divisions_Top[DIV]=IF(LEFT(B5,3)="D52","D52",B5))
L3:L19L3=IF(K3<>"",IF(@PtInPoly(C$4,B$4,FILTER(Table_TPS_AllDivs[[Longitude]:[Latitude]],Table_TPS_AllDivs[Division]=LocationDivision!K3)),"In Polygon","Not in Polygon"),"")
Dynamic array formulas.
Named Ranges
NameRefers ToCells
TPS_AllDivs!ExternalData_18=TPS_AllDivs!$A$1:$D$24438F3:I19

These steps are performed on (or coordinated from) this worksheet. The other worksheets in the workbook hold the shapefile coordinates and other information about the divisions. For reference, the shapefile coordinates were extracted using Power Query from the TPS_Police_Divisions.geojson file that was downloaded from the site I mentioned in an earlier post. One caveat about the large table of shapefile coordinates: it was created with Power Query (in fact vertices for all 17 constituent division shapes were extracted using PQ) and the M code is still present. That code references a source file on my computer (the geojson file) and my file path. If you attempt to run the code (or Refresh All), errors will be obtained. Perhaps it would be better to eliminate the code, but keep the data tables static.
 
Upvote 0
Solution

Forum statistics

Threads
1,223,236
Messages
6,170,912
Members
452,366
Latest member
TePunaBloke

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top