Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Entfernungen mit VBA und google berechnen

Forumthread: Entfernungen mit VBA und google berechnen

Entfernungen mit VBA und google berechnen
20.05.2014 12:28:00
VBA-Mieze
Hallo zusammen,
ich habe folgendes Problem und Google schob seit mehreren Stunden nach einer Lösung. Mittlerweile habe ich mehrere Codes ausprobiert, was aber zu keinem Erfolg führte.
Ich möchte in Excel über einen VBA Code die Entfernung zweier Orte berechnen. Dies soll am besten nur Anhand der Postleitzahlen funktionieren und muss nur für Deutschland funktionieren. Die Entfernung soll nicht durch klicken auf einen Commandbutton o.ä. errechnet werden, sondern über eine Formel (Zum Beispiel "=Entfernung(A1,A2)
Beispiel:
Zelle A1 = Start
Zelle A2 = Zielort
Zelle A3 = Entfernung
Dazu habe ich dieses Makro gefunden, was mir am passendsten erscheint. Es kommt aber immer nur der Fehlerwert -999als Ergebnis raus. Kann hier jemand helfen?
Besten Dank im Voraus
Die VBA-Mieze
Public Function Entfernung(ByVal von As String, ByVal nach As String) As Double
' V2 vom 18.06.2011
' Ermittlung der Entfernung zwischen zwei Adressen mit Hilfe von maps.google.de (kml-Output)
' von: Google-Maps Adressbeschreibung des Starts, z. B. "Germany,Berlin"
' nach: Google-Maps Adressbeschreibung des Ziels, z. B. "France,Paris"
' Rückgabe ist dann die Entfernung laut Google in Kilometern
Dim google As String
Dim dok As Object 'New DOMDocument
Dim knoten As Object 'IXMLDOMNodeList
Dim k As Object 'IXMLDOMNode
Set dok = CreateObject("MSXML.DOMDocument")
google = "http://maps.google.de/maps?hl=de&tab=ll&output=kml&saddr={0}&daddr={1}"
dok.async = False
von = Replace(von, " ", "%20")
nach = Replace(nach, " ", "%20")
dok.Load (Replace(Replace(google, "{0}", von), "{1}", nach))
If Not (dok Is Nothing) Then
' dok.setProperty "SelectionLanguage", "XPath"
dok.setProperty "SelectionNamespaces", "xmlns:kml='http://earth.google.com/kml/2.0'" ' Wichtig!  _
Sonst klappt SelectNodes nicht.
On Error Resume Next
Set knoten = dok.DocumentElement.SelectNodes("//kml:Placemark/kml:name[text()='Route']")
If Err.number  0 Then
Entfernung = Fehler ' Als Fehlernummer
Exit Function
End If
On Error GoTo 0
For Each k In knoten
Dim Beschreibung As String
Beschreibung = k.ParentNode.SelectSingleNode("kml:description").Text
' HTML-Entity-Konstante für nbsp entfernen
Beschreibung = Replace(Beschreibung, "Entfernung: ", "")
' Zahlen und Komma zwischen Doppelpunkt und km sind die Entfernung
Beschreibung = Left(Beschreibung, InStr(1, Beschreibung, "&") - 1)
'beschreibung = Right(beschreibung, Len(beschreibung) - InStr(1, beschreibung, ":"))
'beschreibung = Right(beschreibung, Len(beschreibung) - InStr(1, beschreibung, "&"))
Entfernung = CDbl(Beschreibung)
Next
Set knoten = Nothing
End If
Set dok = Nothing
End Function

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Entfernungen mit VBA und google berechnen
20.05.2014 13:42:12
Tino
Hallo,
Google hat da in letzter Zeit einiges geändert.
Hier mal eine Version zum testen.
https://www.herber.de/bbs/user/90751.xlsm
Wie lang dies funktioniert ist von Google abhängig.
Gruß Tino
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Entfernungen mit VBA und Google Maps berechnen


Schritt-für-Schritt-Anleitung

Um die Entfernung zwischen zwei Orten in Excel mit VBA zu berechnen, folge diesen Schritten:

  1. Öffne Excel und öffne das VBA-Entwicklungsfenster, indem du ALT + F11 drückst.

  2. Füge ein neues Modul hinzu: Klicke auf Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Public Function Entfernung(ByVal von As String, ByVal nach As String) As Double
        Dim google As String
        Dim dok As Object
        Dim knoten As Object
        Dim k As Object
        Set dok = CreateObject("MSXML.DOMDocument")
        google = "http://maps.google.de/maps?hl=de&tab=ll&output=kml&saddr={0}&daddr={1}"
        dok.async = False
        von = Replace(von, " ", "%20")
        nach = Replace(nach, " ", "%20")
        dok.Load (Replace(Replace(google, "{0}", von), "{1}", nach))
        If Not (dok Is Nothing) Then
            dok.setProperty "SelectionNamespaces", "xmlns:kml='http://earth.google.com/kml/2.0'"
            On Error Resume Next
            Set knoten = dok.DocumentElement.SelectNodes("//kml:Placemark/kml:name[text()='Route']")
            If Err.Number <> 0 Then
                Entfernung = -999 ' Fehlerwert
                Exit Function
            End If
            On Error GoTo 0
            For Each k In knoten
                Dim Beschreibung As String
                Beschreibung = k.ParentNode.SelectSingleNode("kml:description").Text
                Beschreibung = Replace(Beschreibung, "Entfernung: ", "")
                Beschreibung = Left(Beschreibung, InStr(1, Beschreibung, "&amp;") - 1)
                Entfernung = CDbl(Beschreibung)
            Next
            Set knoten = Nothing
        End If
        Set dok = Nothing
    End Function
  4. Speichere deine Arbeit und schließe den VBA-Editor.

  5. Verwende die Funktion in Excel: In Zelle A3 kannst du jetzt die Formel =Entfernung(A1, A2) verwenden, um die Entfernung zwischen den Postleitzahlen in A1 und A2 zu berechnen.


Häufige Fehler und Lösungen

  • Fehlerwert -999: Dieser Fehler tritt auf, wenn die Google Maps API keine Route findet. Stelle sicher, dass die eingegebenen Postleitzahlen korrekt sind.
  • Keine Verbindung zum Internet: Der Code benötigt eine aktive Internetverbindung. Überprüfe deine Verbindung, wenn die Berechnung nicht funktioniert.
  • Änderungen bei Google: Google ändert regelmäßig seine API. Wenn der Code nicht mehr funktioniert, könnte es an einer Änderung in der Google Maps API liegen.

Alternative Methoden

Falls du VBA nicht verwenden möchtest, kannst du auch folgende Methoden ausprobieren:

  • Google Maps direkt verwenden: Gehe auf die Google Maps Webseite und tippe die Postleitzahlen manuell ein, um die Entfernung zu berechnen.
  • Online-Dienste: Websites wie https://www.distance.to/ ermöglichen es dir, Entfernungen zwischen zwei Adressen zu berechnen, ohne Excel zu verwenden.

Praktische Beispiele

  • Beispiel 1: Wenn in Zelle A1 10115 (Berlin) und in Zelle A2 80331 (München) steht, gibt die Formel =Entfernung(A1, A2) die Entfernung in Kilometern zurück.
  • Beispiel 2: Für Zelle A1 20095 (Hamburg) und Zelle A2 90402 (Nürnberg) zeigt die Formel die Distanz zwischen diesen beiden Städten.

Tipps für Profis

  • Fehlerbehandlung: Füge im VBA-Code erweiterte Fehlerbehandlungen hinzu, um genauere Fehlermeldungen auszugeben.
  • VBA optimieren: Teste verschiedene Parameter für die Google Maps API, um genauere oder spezifischere Routen zu erhalten.
  • Automatisierung: Überlege, ob du die Funktion in eine größere Excel-Lösung integrieren kannst, um automatisch Distanzen zwischen mehreren Postleitzahlen zu berechnen.

FAQ: Häufige Fragen

1. Kann ich die Funktion auch für andere Länder verwenden?
Die aktuelle Funktion wurde für Deutschland entwickelt. Um sie für andere Länder zu nutzen, musst du die Adressparameter entsprechend anpassen.

2. Warum funktioniert die Funktion nicht mehr?
Google kann Änderungen an seiner API vornehmen. Überprüfe die aktuelle Dokumentation von Google Maps, um sicherzustellen, dass die verwendete URL und die Parameter noch gültig sind.

3. Gibt es eine Möglichkeit, die Berechnung schneller zu machen?
Ja, indem du die Anzahl der API-Anfragen minimierst und die Funktion nur bei Bedarf aufrufst, kannst du die Geschwindigkeit erhöhen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige