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

Forumthread: Luftlinie Berechnen

Luftlinie Berechnen
30.01.2021 18:44:51
Suysaler
Hallo,
Ich habe eine neue Aufgabe bekommen und wollte fragen ob ihr mir weiterhelfen könnt.
Ich muss aus diversen Adresse Also Start + Ziel = Luftlinie errechnen. Ich habe es mit diversen Makros versucht jedoch scheint es nicht zu klappen...
Ich habe auch hier im Forum etwas gefunden jedoch funktioniert das leider auch nicht..
Eine idee?
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Luftlinie Berechnen
30.01.2021 18:57:51
Suysaler
Danke Marc,
Leider nicht. Auf dieser Seite war ich auch schon jedoch geht das genauso nicht.
Ich habe hier im Forum ein Eintrag von 2013 gefunden.
https://www.herber.de/forum/archiv/1304to1308/1306053_Entfernungsberechnung_luftlinie.html
Genau das selbe Problem habe ich auch jedoch funktioniert es nicht...
Ich weiß nicht was das Problem da ist...
Vllt die Zellen? Ich habe auf einer neuen Arbeitsmappe genauso wie der Herr die Spalten dann genommen jedoch wird es trotzdem nicht ausgerechnet
Anzeige
AW: Luftlinie Berechnen
30.01.2021 19:05:11
ralf_b
die bieten eine Api an um Daten dort abzugreifen. aber die willst du nicht nutzen oder?
AW: Luftlinie Berechnen
30.01.2021 19:06:35
Suysaler
Nein, es sollte schon direkt durch die Excel-Liste die ich habe, berechnen. So wie es 2013 bereits der fall war...
AW: Luftlinie Berechnen
30.01.2021 19:08:15
ralf_b
webseiten verändern sich. Ach um genau solche Nutzung zu verhindern.
Anzeige
AW: Luftlinie Berechnen
30.01.2021 19:08:16
ralf_b
webseiten verändern sich. Ach um genau solche Nutzung zu verhindern.
AW: Luftlinie Berechnen
30.01.2021 18:52:09
Suysaler
Ganz vergessen zu erwähnen. Ich soll die Daten von der seite www.luftlinie.org errechnen...
AW: Luftlinie Berechnen
30.01.2021 19:05:27
Suysaler
Hier noch mal die Schleife:
Sub luftlinie_online_flexibel()
Zeilen = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
For schleife = 1 To Zeilen
Dim IEApp As Object, luftlinie As Object
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = False
IEApp.Navigate "http://www.luftlinie.org/" & Cells(schleife, 1) & "_" & Cells(schleife, 2)
Do: Loop Until IEApp.busy = False
Do: Loop Until IEApp.busy = False
Do: Loop Until IEApp.document.readyState = "complete"
Set luftlinie = IEApp.document.getElementById("airline")
If Not luftlinie Is Nothing Then
Cells(schleife, 3) = luftlinie.innertext
End If
IEApp.Quit
Set IEApp = Nothing
Next schleife
End Sub

Kann es vllt damit zusammen hängen das es nicht funkioniert, weil 'InternetExplorer' angewandt wird?
Anzeige
AW: Luftlinie Berechnen
30.01.2021 19:11:16
Oberschlumpf
man, man, auch wenn ich nerven sollte, ich frag auch dich!
Wieso zeigst du uns nur Code und nich per Upload gleich ne Bsp-Datei mit Bsp-Daten UND dem Code?
AW: Luftlinie Berechnen
30.01.2021 19:18:08
Suysaler
Weil ich nicht vor dem PC bin. Sonst hätte ich ein Upload gemacht.
AW: Luftlinie Berechnen
30.01.2021 20:04:54
volti
Hallo,
teste mal folgendes Makro. Vielleicht kannst Du es bei Erfolg in Deinem Sinne umbauen und verwenden:
Code:

Option Explicit
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Type DIST_STRUCT
     Start As String ' Mehrere durch "/" getrennt eingeben
     Ziel  As String
     LDist As String
     FDist As String
End Type
Sub EntfernungErmitteln()
  Dim tDist As DIST_STRUCT
  With tDist
      .Start = "Frankfurt": .Ziel = "München"           ' Zu suchende  Orte <<< anpassen >>>
      GetDistance tDist
      MsgBox "Die Entfernung zwischen" & vbCrLf _
      & .Start & vbCrLf & "und" & vbCrLf _
      & .Ziel & vbCrLf & "beträgt " & .LDist & " km." & vbCrLf _
      & "Die Fahrstrecke beträgt " & .FDist & "!", vbInformation, "Entfernung ermitteln"
  End With
End Sub
Sub GetDistance(tDist As DIST_STRUCT)
  Dim oNode As Object
  With CreateObject("InternetExplorer.Application")
      .navigate "http://www.luftlinie.org"          ' Zur Url surfen
      While Not .readyState = 4: DoEvents: Wend     ' Warten bis Seite geladen ist
          With .Document
              Set oNode = .getElementById("start")
              If Not oNode Is Nothing Then
                 oNode.Value = tDist.Start
                 Set oNode = .getElementById("end")
                 On Error Resume Next
                 If Not oNode Is Nothing Then
                    oNode.Value = tDist.Ziel
                    Set oNode = .getElementById("calcDistance")
                    If Not oNode Is Nothing Then oNode.Click
                    Do
                       Sleep 100
                       Set oNode = Nothing
                       Set oNode = .getElementById("strck")
                       If Not oNode Is Nothing Then
                          If Not oNode.outerText Like "*--*" Then Exit Do
                       End If
                       DoEvents
                    Loop
                    tDist.LDist = .getElementsByClassName("value km")(0).outerText
                    tDist.FDist = .getElementById("strck").outerText
                    tDist.Start = tDist.Start & " " & .getElementsByClassName("regions")(0).outerText
                    tDist.Ziel = tDist.Ziel & " " & .getElementsByClassName("regions")(2).outerText
                 End If         ' End
              End If            ' Start
          End With
          .Quit                 ' IE schließen
      End With
End Sub

_________
viele Grüße
Karl-Heinz

Anzeige
AW: Luftlinie Berechnen
30.01.2021 21:16:48
Suysaler
Super danke dir Karl-Heinz :)
Ich habe es gerade ausprobiert und funktioniert soweit.
Nun meine Frage.. Gibt es eine möglichkeit die Daten von der Mappe abfragen zu lassen damit ich nicht jedesmal die Adresse einfügen muss?
Beispiel habe ich als Upload dabei
Der Start ist immer Zelle A und die Ziele in Zelle B
Kann man da einzeln die 'Zielspalten' ausfüllen lassen?
Hat da jemand eine Idee dazu?
Userbild
Anzeige
AW: Luftlinie Berechnen
30.01.2021 21:58:41
volti
Hallo,
hier zwei Möglichkeiten des Aufrufs:
Code:

[Cc][+][-]

Sub EntfernungErmitteln() ' Einzelentfernung für die aktuelle Zeile Dim tDist As DIST_STRUCT With tDist .Start = Cells(ActiveCell.Row, "A").Value .Ziel = Cells(ActiveCell.Row, "B").Value If .Start <> "" And .Ziel <> "" Then GetDistance tDist Cells(ActiveCell.Row, "C").Value = .LDist & " km" End If End With End Sub Sub EntfernungErmittelnViele() ' Liste ausfüllen Dim tDist As DIST_STRUCT, iZeile As Integer Dim WSh As Worksheet Set WSh = ActiveSheet For iZeile = 1 To WSh.Cells(Rows.Count, "A").End(xlUp).Row With tDist .Start = WSh.Cells(iZeile, "A").Value .Ziel = WSh.Cells(iZeile, "B").Value If .Start <> "" And .Ziel <> "" Then GetDistance tDist WSh.Cells(iZeile, "C").Value = .LDist & " km" End If End With Next iZeile End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Luftlinie Berechnen
30.01.2021 21:06:52
Wolfgang
Hallo,
vor Jahren wollte ich auch so eine Tabelle erstellen und habe im Internet nach Hilfe gesucht.
Leider wurde ich mit der damaligen Beispieldatei etwas "überfordert" mit VBA und habe das Ganze in die "unterste Schublade gelegt".
Ich sende mal hier die Beispieldatei, vielleicht gibt es jemanden der das perfektionieren kann.
https://www.herber.de/bbs/user/143463.xls
Grüße
Wolfgang
Anzeige
AW: Luftlinie Berechnen
31.01.2021 00:09:45
volti
Hallo Wolfgang,
wenn das mit Luftlinie.org ausgefüllt werden soll, kannst Du dieses Makro mal ausprobieren.
Dauert allerdings bei den vielen Orten 'ne Weile.
Du kannst Luftlinie oder Fahrstrecke ausfüllen lassen.
Das dort enthaltene Google.Maps habe ich nicht weiter verfolgt.
Code:

Option Explicit
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub Entfernung()
   'es werden immer nur die leeren Zellen abgefragt
  Dim oIE As Object, oNode As Object, WSh As Worksheet
  Dim i As Integer, j As Long, Items As String
    
  Set WSh = Tabelle1
    
  Set oIE = CreateObject("InternetExplorer.Application")
  oIE.Visible = False
      
  For i = 2 To WSh.UsedRange.Columns.Count
    
    If WSh.Cells(1, i).Value = "" Then Exit For
    For j = 2 To Tabelle1.UsedRange.Rows.Count
      If WSh.Cells(j, 1).Value = "" Then Exit For
      If WSh.Cells(j, i).Value = "" Then
         If WSh.Cells(1, i).Value <> Tabelle1.Cells(j, 1).Value Then
           Items = "/" & WSh.Cells(1, i).Value & "/" & WSh.Cells(j, 1).Value
           oIE.navigate "http://www.luftlinie.org" & Items  ' Zur Url surfen
           While Not oIE.readyState = 4: DoEvents: Wend     ' Warten bis Seite geladen ist
          
           With oIE.document
              Do
                 Sleep 50
                 Set oNode = Nothing
                 Set oNode = .getElementById("strck")
                 If Not oNode Is Nothing Then
                    If Not oNode.outerText Like "*--*" Then Exit Do
                 End If
                 DoEvents
              Loop
' Luftlinie
              WSh.Cells(j, i).Value = .getElementsByClassName("value km")(0).outerText
' Fahrstrecke
'             WSh.Cells(J, I).Value = .getElementById("strck").outerText
              WSh.Cells(i, j).Value = WSh.Cells(j, i).Value
           End With
         Else
           WSh.Cells(j, i).Value = 0
         End If
      End If
    Next j
  
  Next i
  
  oIE.Quit
  Set oIE = Nothing
  MsgBox "Fertig"
End Sub

_________
viele Grüße
Karl-Heinz

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Luftlinie Berechnen in Excel


Schritt-für-Schritt-Anleitung

Um die Luftlinie zwischen zwei Adressen in Excel zu berechnen, kannst du folgende Schritte ausführen:

  1. Daten vorbereiten: Erstelle eine Excel-Tabelle mit den Spalten für Start- und Zieladresse. Beispiel:

    • Spalte A: Startadresse
    • Spalte B: Zieladresse
  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Modul erstellen: Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  4. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Option Explicit
    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    
    Type DIST_STRUCT
       Start As String
       Ziel As String
       LDist As String
       FDist As String
    End Type
    
    Sub EntfernungErmitteln()
       Dim tDist As DIST_STRUCT
       With tDist
           .Start = Cells(1, 1).Value ' Zelle A1
           .Ziel = Cells(1, 2).Value  ' Zelle B1
           GetDistance tDist
           MsgBox "Die Entfernung beträgt " & .LDist & " km."
       End With
    End Sub
    
    Sub GetDistance(tDist As DIST_STRUCT)
       Dim oNode As Object
       With CreateObject("InternetExplorer.Application")
           .navigate "http://www.luftlinie.org/" & tDist.Start & "_" & tDist.Ziel
           While Not .readyState = 4: DoEvents: Wend
           Set oNode = .document.getElementById("value km")
           If Not oNode Is Nothing Then
               tDist.LDist = oNode.outerText
           End If
           .Quit
       End With
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Führe das Makro EntfernungErmitteln aus, um die Luftlinie zu berechnen.


Häufige Fehler und Lösungen

  • Fehler: Internet Explorer öffnet sich nicht oder funktioniert nicht: Stelle sicher, dass du die richtige Version von Internet Explorer installiert hast, da der Code auf dieser Anwendung basiert.

  • Fehler: Keine Daten zurückgegeben: Überprüfe, ob die Start- und Zieladressen korrekt eingegeben sind und dass die Website www.luftlinie.org erreichbar ist.

  • Fehler: VBA läuft nicht: Aktiviere Makros in Excel unter Datei > Optionen > Trust Center > Einstellungen für das Trust Center.


Alternative Methoden

Falls du die Luftlinien auch ohne VBA berechnen möchtest, kannst du die Entfernung auch manuell über die Koordinaten der Orte ermitteln. Dazu benötigst du die geografischen Koordinaten (Breiten- und Längengrad) und kannst die Haversine-Formel in Excel verwenden:

=6371 * ACOS(SIN(RADIANS(Breit1)) * SIN(RADIANS(Breit2)) + COS(RADIANS(Breit1)) * COS(RADIANS(Breit2)) * COS(RADIANS(Lang2 - Lang1)))

Hierbei sind Breit1, Lang1 die Koordinaten des Startpunkts und Breit2, Lang2 die Koordinaten des Zielpunkts.


Praktische Beispiele

  1. Beispiel für Frankfurt nach München:

    • Start (A1): Frankfurt
    • Ziel (B1): München
    • Nach Ausführung des Makros erhältst du eine Meldung mit der Entfernung in km.
  2. Excel Tabelle zur Berechnung mehrerer Entfernungen:

    • Trage die Startadressen in Spalte A und die Zieladressen in Spalte B ein.
    • Erweitere das Makro, um für jede Zeile die Entfernung zu berechnen und das Ergebnis in Spalte C auszugeben.

Tipps für Profis

  • Nutze die API von www.luftlinie.org, um direkt aus Excel auf die Daten zuzugreifen, anstatt den Internet Explorer zu verwenden.
  • Experimentiere mit Formeln zur Berechnung der Entfernung, um die Abhängigkeit von Webseiten zu vermeiden.
  • Erstelle ein benutzerdefiniertes Excel-Dashboard, um die Entfernungen visuell darzustellen.

FAQ: Häufige Fragen

1. Wie berechnet man die Luftlinie zwischen zwei Adressen in Excel?
Du kannst dies mit VBA-Code tun, der die Webseite www.luftlinie.org nutzt, um die Entfernungen abzurufen.

2. Welche Excel-Version benötige ich?
Das Beispiel funktioniert mit Excel 2010 und höher, sofern VBA und Internet Explorer unterstützt werden.

3. Gibt es eine Alternative zu VBA?
Ja, du kannst die Haversine-Formel verwenden, um die Entfernung zwischen zwei geografischen Punkten zu berechnen, wenn du die Koordinaten hast.

4. Was tun, wenn die Berechnung nicht funktioniert?
Überprüfe die Eingaben in den Zellen und stelle sicher, dass die Webseite erreichbar ist. Achte auch darauf, dass Makros in Excel aktiviert sind.

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