Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Entfernung zwischen zwei PLZ mit GoogleMaps berechnen!
Hallo Winny,
ich könnte deine Hilfe gebrauchen bei der Berechnung.

1. Ich müsste noch als Ziel eine Strasse und Hausnummer angeben.
2. Bei einer Anzahl von 5000 Datensätzen bricht die Berechnung bei ca. 1000 ab.
(Das könnte ich ggf. beheben indem ich die Tabelle aufteile.)

Ich hoffe du kannst mir weiterhelfen.

Gruß,
Martin
Top
Google macht nicht alles kostenlos! Dafür musst Du löhnen! Steht irgendwo hier im Thread ...
Top
Hallo Martin,

da der Thread relativ lang ist und auch mehrere user Beispiele in verschiedenen Versionen eingestellt haben, wäre es vorteilhaft, wenn Du einen Link zu der von Dir gewählten Version postest.

In der von mir in Beitrag #6 geposteten ersten Lösung waren nur die Straßen des Ausgangsortes enthalten. Von mir und Winny kamen in Folge noch Codekorrekturen dazu. Meinst Du diese Version?

Die Straßen von Ausgangs- und Zielort berücksichtigt z.B. die Version von Chris_Ka im Beitrag #81 :
http://www.clever-excel-forum.de/thread-...l#pid38206
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
Guten Morgen,

ich habe mir die Datei Entfernungen_GoogleMaps_V3 runtergeladen, jedoch öffnet sich nur Googlemaps wenn ich ein Feld klicke. Wisst ihr was ich fallsch mache?

Excel 2010
Internetexplorer 11

Danke Vielmals
Top
Moin!
In einem anderen Forum wurde kürzlich ein ähnliches Problem diskutiert.
Dort ging es jedoch um die Entfernung zwischen zwei Postleitzahlen, welches in der Regel als Anhaltspunkt völlig ausreicht.
Der Vorteil ist, dass der Code extrem kompakt ist.
Er stammt von snb  :19:

In der Datei im Anhang gibt es eine "intelligente" Tabelle.
Makro M_snb starten.

Modul Modul2
Option Explicit 
 
Sub M_snb() 
Dim sn, j# 
  sn = Tabelle1.ListObjects(1).DataBodyRange 
   
  With CreateObject("MSXML2.XMLHTTP") 
    For j = 1 To Tabelle1.ListObjects(1).DataBodyRange.Rows.Count 
      .Open "GET", "http://maps.googleapis.com/maps/api/directions/xml?origin=Deutschland," & _
         Format(sn(j, 1), "00000") & "&destination=Deutschland," & _
         Format(sn(j, 3), "00000") & "&sensor=false", False 
      .send 
      sn(j, 5) = .responseXML.SelectSingleNode("//leg/distance/text").Text 
    Next 
  End With 
    
  Tabelle1.ListObjects(1).DataBodyRange = sn 
End Sub 

Gruß Ralf


Angehängte Dateien
.xlsm   GoogleEntf.xlsm (Größe: 14,96 KB / Downloads: 153)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
Hallöchen,

Was sollte denn Deiner Meinung nach passieren? Beim Öffnen passiert nix, ist auch nicht vorgesehen und nicht programmiert.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
Hallo,

erstmal Danke für die Klasse Tabelle die du da gestrickt hast.

Jetzt bräuchte ich noch eine primitive Luftlinienberechnung zwischen zwei Orten die ich gleich mit in diese Tabelle mit integrieren kann.
Ergebnis ist dann zum Beispiel in Zeile 1 die Fahrtzeit mit 35km und in Zeile 2 die Luftlinie mit 28km.
Wenn die Luftlinie auch noch mit Maps darstellbar wäre ist alles TOP.

Ist das möglich?

Ich verwende Excel 2013.

Gruß
Tobias
Top
Hallo Ralf,

Du schreibst:
(07.03.2017, 11:49)RPP63 schrieb: Der Vorteil ist, dass der Code extrem kompakt ist.

Da hätte ich zur Info noch ein paar Bemerkungen dazu:
Der große Nachteil ist, dass bei jeder Ausführung alle Zeilen neu berechnet werden und man somit sehr schnell das kostenlose Tageslimit erreicht. Es ist besser nur auf geänderte Zeilen zu reagieren und somit das Tageslimit zu schonen.

Weiterhin werden nur die Postleitzahlen an Google geschickt und nicht die Orte. Das hat zwei Konsequenzen, erstens werden somit die Eingaben PLZ/Ort nicht automatisch auf Stimmigkeit überprüft und zweitens nimmt Google dann einfach die Mitte des PLZ-Bereiches an, was auch einige Kilometer Differenz bedeuten kann.
Um bessere und verständlichere Ergebnisse zu erzielen, sollte man die Spalten mit den Orten in die Abfrage einbeziehen und gleichzeitig im 'responseXML' weitere SingleNodes auswerten. - Die Infos sind vorhanden.


Gruß Carsten
Top
Hi Carsten!
Ich schrieb aber auch:
Zitat:Dort ging es jedoch um die Entfernung zwischen zwei Postleitzahlen, welches in der Regel als Anhaltspunkt völlig ausreicht.
Überlassen wir es doch einfach dem geneigten User, die für ihn sinnvollste Variante zu wählen.
Ich habe hier schließlich keine bestehenden Lösungen kritisiert, sondern eine Alternative angeboten.

Noch etwas:
Dies dient doch normalerweise dazu, seine bereits vorhandene Adressen-Datenbank um die Entfernung zu erweitern.
Obiges Makro hat den großen Vorteil gegenüber einer UDF, dass es erheblich schneller abläuft, da nicht pro Datensatz eine Verbindung aufgebaut und geschlossen wird, sondern in einer Session abgefrühstückt wird.

Dennoch ist es natürlich einfach, für eine Erweiterung einer bestehenden Datenbank eine UDF auf Basis des obigen Makros zu schreiben.

Two Cents und Grüße

Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
Hallo Ralf,

ich verstehe Deinen Post und ich habe auch nicht kritisiert, sondern nur geschrieben:
(15.03.2017, 11:05)DbSam schrieb: Da hätte ich zur Info noch ein paar Bemerkungen dazu: ...

Ich hätte jetzt eher folgende Antwort von Dir erwartet:

Lieber Carsten, mit ein paar kleinen Änderungen ist der kompakte Code effizienter und schont das Limit:
Code:
Option Explicit

Sub M_snb()
Dim sn, j#
 sn = Tabelle1.ListObjects(1).DataBodyRange
 
 With CreateObject("MSXML2.XMLHTTP")
   For j = 1 To Tabelle1.ListObjects(1).DataBodyRange.Rows.Count
       If Len(sn(j, 5)) = 0 Then
         .Open "GET", "http://maps.googleapis.com/maps/api/directions/xml?origin=Deutschland," & _
               Format(sn(j, 1), "00000") & "&destination=Deutschland," & _
               Format(sn(j, 3), "00000") & "&sensor=false", False
         .send
         sn(j, 5) = .responseXML.SelectSingleNode("//leg/distance/text").Text
       End If
   Next
 End With
 
 Tabelle1.ListObjects(1).DataBodyRange = sn
End Sub

... und dann die Url noch um die Orte erweitert, schon hätte ich nichts mehr zu nörgeln.
Außer, dass es nur für Deutschland funktioniert ...
:32: 


Gruß Carsten
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 5 Gast/Gäste