Clever-Excel-Forum

Normale Version: Schleife in Makro einbauen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Zusammen :s,

ich habe Folgendes Problem und schaff es leider nicht es selber zu lösen.
Ich habe ein Funktion mit der ich über GoogleMaps mir die Entfernung zwischen zwei
Städten berechnen lasse. Jetzt möchte ich sie aber gern in eine Schleife einbauen
das mir auf einmal eine Entfernungsmatrix gefüllt wird. Beispielsweise 10 Städte und als Output
sollte dann die 10x10 Matrix mir allen Entfernungen gefüllt werden.

Es müsste doch so in der Art aussehen oder ? Frage ist jetzt wie ich die zwei Geschichten verbinde..
Ich hoff Ihr könnt mir helfen.

Sub Schleifen()


    Dim i As Integer, j As Integer, k As Integer
    
    k = 0
    For i = 1 To 10
        For j = 1 To 10
            k = ???
            Cells(i, j).Value = k
        Next j
    Next i
    
End Sub

Hier die Funktion:

Public Function GetDistance(start As String, dest As String)

    Dim firstVal As String, secondVal As String, lastVal As String
    firstVal = "https://maps.googleapis.com/maps/api/distancematrix/json?origins="
    secondVal = "&destinations="
    lastVal = "&key=AIzaSyBtYr596Le1N1GRCModwPrwYxBS8y5ZYtg"
    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 Function
ErrorHandl:
    GetDistance = -1
End Function

Vielen Dank für die Hilfe im Voraus. Falls ich was vergessen habe bitte sagen, ist mein erster Beitrag hier im Forum :23:.

Viele Grüße,
Max
Hi

ich bin mir nich 100% sicher ob es klappt, probier es mal so:  (im Prinzip ruft du die Funktion als Unterprogramm auf)
k = GetDistance start = Wert, dest = Wert    Wert ist der String für Start und Ziel. Würde mich freuen wenn es klappt.
Wenn es nicht auf Anhieb klappt kann es an der Syntac liegen, das sie evtl. anders geschrieben werden muss.

mfg  Gast 123
Hallo Max,

wenn Start und Ziel in Spalte A und Zeile 1 stehen:
Sub Schleifen()
 Dim i As Integer, j As Integer
 For i = 2 To 11
   For j = 2 To 11
     If i <> j Then
       Cells(i, j).Value = GetDistance(Cells(i, 1).Value, Cells(1, j).Value)
     End If
   Next j
 Next i
End Sub
,kommt das bei mir raus:

ABCDEFGHIJK
1von / nachBerlinDresdenErfurtHannoverKölnLeipzigMainzMünchenRostockStuttgart
2Berlin-1-1-1-1-1-1-1-1-1
3Dresden-1-1-1-1-1-1-1-1-1
4Erfurt-1-1-1-1-1-1-1-1-1
5Hannover-1-1-1-1-1-1-1-1-1
6Köln-1-1-1-1-1-1-1-1-1
7Leipzig-1-1-1-1-1-1-1-1-1
8Mainz-1-1-1-1-1-1-1-1-1
9München-1-1-1-1-1-1-1-1-1
10Rostock-1-1-1-1-1-1-1-1-1
11Stuttgart-1-1-1-1-1-1-1-1-1

Gruß Uwe
Moin!
Da es sich um eine Public UDF handelt, kann man die Funktion ja auch direkt ins Sheet eintragen.
Allerdings ist die Funktion schlicht fehlerhaft, siehe auch Uwe!
Ich habe den ErrHdl wie folgt umgeschrieben
ErrorHandl:
    GetDistance = CVErr(xlErrValue)
und erhalte folgende aufschlussreiche Kreuztabelle:
ABCDEFGHIJK
1von / nachBerlinDresdenErfurtHannoverKölnLeipzigMainzMünchenRostockStuttgart
2Berlin
3Dresden
4Erfurt
5Hannover
6Köln
7Leipzig
8Mainz
9München
10Rostock
11Stuttgart
Formeln der Tabelle
ZelleFormel
B2=WENNFEHLER(GetDistance(B$1;$A2);"")

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8

Suche mal hier im Forum nach Google Maps, da gibt es funktionierende Varianten.

Gruß Ralf
Hallo Zusammen,

sorry für die späte Antwort. Vielen Dank für eure Hilfe, läuft!!