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

Winkelberechnung in VBA

Forumthread: Winkelberechnung in VBA

Winkelberechnung in VBA
21.04.2015 14:41:47
pweksictul
Hallo,
ich möchte Winkel zwischen drei Punkten berechnen, was auch grundsätzlich klappt, aber mit der Variante, die ich mir aus verschiedenen Foren zusammengeklebt habe, ist der Winkel immer hÖchsten 180° groß. In dem Beispiel unten hätte ich aber gerne, dass nicht zwei Mal dasselbe Ergebnis herauskommt, sondern einmal 135° und einmal 225°. (Meine Mathekenntnisse sind leider völlig verschüttet und man verzeihe mir die vielleicht unüblichen Bezeichnungen unten.)
Beispielcode
Sub Winkel_test()
Dim x(1 To 4), y(1 To 4), c(1 To 3), b(1 To 2)
Dim WinkelA, WinkelB, Pi
Pi = 4 * Atn(1)
x(1) = 1
x(2) = 2
x(3) = 2
x(4) = 3
y(1) = 1
y(2) = 2
y(3) = 3
y(4) = 4
'Strecke c
c(1) = Sqr((x(2) - x(1)) ^ 2 + (y(2) - y(1)) ^ 2)
c(2) = Sqr((x(3) - x(2)) ^ 2 + (y(3) - y(2)) ^ 2)
c(3) = Sqr((x(4) - x(3)) ^ 2 + (y(4) - y(3)) ^ 2)
'Strecke b
b(1) = Sqr((x(3) - x(1)) ^ 2 + (y(3) - y(1)) ^ 2)
b(2) = Sqr((x(4) - x(2)) ^ 2 + (y(4) - y(2)) ^ 2)
'Winkelberechnung
WinkelA = (WorksheetFunction.Acos((c(1) ^ 2 + c(2) ^ 2 - b(1) ^ 2) _
/ (2 * c(1) * c(2)))) / Pi * 180
WinkelB = (WorksheetFunction.Acos((c(2) ^ 2 + c(3) ^ 2 - b(2) ^ 2) _
/ (2 * c(2) * c(3)))) / Pi * 180
End Sub
Danke im Voraus!
Pwek

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Winkel2 = Winkel1 - 360° '_oT
21.04.2015 15:06:43
pweksictul
Danke, aber das hilft nicht. Die Daten stehen da nur, um das Problem zu verdeutlichen. Die Winkel sind voneinander unabhängig, d.h. ich kann nicht WinkelA aus WinkelB ableiten.

Frage noch offen
21.04.2015 16:08:44
pweksictul
Frage noch offen

AW: Winkelberechnung in VBA
21.04.2015 16:45:22
Klexy
Meine Geometrie-Kenntnisse sind auch verschüttet und ich hab keine Ahnung, was du da berechnest, aber da muss das Gleiche rauskommen, weil die Faktoren alle gleich sind. Oder lieg ich da falsch?
Sub Winkel_test()
Dim x(1 To 4), y(1 To 4), c(1 To 3), b(1 To 2)
Dim WinkelA, WinkelB, Pi
Pi = 4 * Atn(1)
x(1) = 1
x(2) = 2
x(3) = 2
x(4) = 3
y(1) = 1
y(2) = 2
y(3) = 3
y(4) = 4
'Strecke c
c(1) = Sqr((x(2) - x(1)) ^ 2 + (y(2) - y(1)) ^ 2)
c(2) = Sqr((x(3) - x(2)) ^ 2 + (y(3) - y(2)) ^ 2)
c(3) = Sqr((x(4) - x(3)) ^ 2 + (y(4) - y(3)) ^ 2)
Range("B2") = c(1)
Range("B3") = c(2)
Range("B4") = c(3)
'Strecke b
b(1) = Sqr((x(3) - x(1)) ^ 2 + (y(3) - y(1)) ^ 2)
b(2) = Sqr((x(4) - x(2)) ^ 2 + (y(4) - y(2)) ^ 2)
Range("B6") = b(1)
Range("B7") = b(2)
'Winkelberechnung
WinkelA = (WorksheetFunction.Acos((c(1) ^ 2 + c(2) ^ 2 - b(1) ^ 2) / (2 * c(1) * c(2))))  _
/ Pi * 180
WinkelB = (WorksheetFunction.Acos((c(2) ^ 2 + c(3) ^ 2 - b(2) ^ 2) / (2 * c(2) * c(3))))  _
/ Pi * 180
Range("B9") = (c(1) ^ 2 + c(2) ^ 2 - b(1) ^ 2) / (2 * c(1) * c(2)) 'über dem Bruch in  _
Acos Winkel A
Range("B10") = (2 * c(1) * c(2))                                   'unter dem Bruch in  _
Acos Winkel A
Range("B11") = (c(2) ^ 2 + c(3) ^ 2 - b(2) ^ 2) / (2 * c(2) * c(3)) 'über dem Bruch in  _
Acos Winkel B
Range("B12") = (2 * c(2) * c(3))                                   'unter dem Bruch in  _
Acos Winkel B
End Sub

Anzeige
AW: Winkelberechnung in VBA
21.04.2015 17:02:28
UweD
Hallo
wenn man die Strecken mal darstellt, sieht das so aus.
Userbild
Du hast also 2 Dreiecke.
Im oberen Teil rechnest du die Längen der einzelnen Strecken aus.
im unteren Teil, über den Cosinussatz je einen Winkel
- 1. den Winkel aus Dreieck 1 zwischen c1 und c2
- 2. den Winkel aus Dreieck 2 zwischen c2 und c3
Die sind aber nunmal gleich groß. (Stufenwinkel)
Willst du evt. einen anderen 2. Winkel berechnen?
welchen?
zwischen c1 und b1 aus Dreieck 1
zwischen c2 und b1 aus Dreieck 1
oder
zwischen c2 und b2 aus Dreieck 2
zwischen c3 und b2 aus Dreieck 2
http://de.wikipedia.org/wiki/Kosinussatz
Gruß UweD

Anzeige
AW: Winkelberechnung in VBA
21.04.2015 17:05:24
UweD
nicht Stufenwinkel, sondern Wechselwinkel

AW: Winkelberechnung in VBA
21.04.2015 17:21:51
pweksictul
Danke für die Darstellung. Jetzt kann ich selbst lösen.
Ich möchte immer den Winkel im Uhrzeigersinn berechnen:
  • für das Dreieck 1 in der Darstellung den Winkel zwischen c1 und c2

  • für das Dreieck 2 in der Darstellung den Wechselwinkel zwischen c2 und c3.

  • Lässt sich dann so ausrechnen (bitte um Korrektur, falls ich einen Denkfehler habe):
    Für Dreieck 1: Wenn der X-Wert von P2 gößer ist als (X(P3) - X(P1)), dann so wie bisher rechnen.
    Für Dreieck 2: Wenn der X-Wert von P3 kleiner ist als (X(P4) - X(P2)), dann Wechselwinkel rechnen.
    Sollte gehen. Ich werde mal versuchen, dass in dem ursprünglich geposteten Code umzusetzen.
    Anzeige
    ;
    Anzeige

    Infobox / Tutorial

    Winkelberechnung in VBA: So geht's


    Schritt-für-Schritt-Anleitung

    Um den Winkel zwischen drei Punkten in VBA zu berechnen, kannst du den folgenden Code verwenden. Dieser nutzt die Acos-Funktion, um den Winkel zu berechnen. Achte darauf, dass du den Cosinus-Satz anwendest:

    Sub Winkel_test()
        Dim x(1 To 4), y(1 To 4), c(1 To 3), b(1 To 2)
        Dim WinkelA, WinkelB, Pi
        Pi = 4 * Atn(1)
    
        ' Koordinaten der Punkte
        x(1) = 1
        x(2) = 2
        x(3) = 2
        x(4) = 3
        y(1) = 1
        y(2) = 2
        y(3) = 3
        y(4) = 4
    
        ' Strecken berechnen
        c(1) = Sqr((x(2) - x(1)) ^ 2 + (y(2) - y(1)) ^ 2)
        c(2) = Sqr((x(3) - x(2)) ^ 2 + (y(3) - y(2)) ^ 2)
        c(3) = Sqr((x(4) - x(3)) ^ 2 + (y(4) - y(3)) ^ 2)
    
        b(1) = Sqr((x(3) - x(1)) ^ 2 + (y(3) - y(1)) ^ 2)
        b(2) = Sqr((x(4) - x(2)) ^ 2 + (y(4) - y(2)) ^ 2)
    
        ' Winkelberechnung
        WinkelA = (WorksheetFunction.Acos((c(1) ^ 2 + c(2) ^ 2 - b(1) ^ 2) / (2 * c(1) * c(2)))) * (180 / Pi)
        WinkelB = (WorksheetFunction.Acos((c(2) ^ 2 + c(3) ^ 2 - b(2) ^ 2) / (2 * c(2) * c(3)))) * (180 / Pi)
    
        ' Ausgabe der Winkel
        Debug.Print "Winkel A: "; WinkelA
        Debug.Print "Winkel B: "; WinkelB
    End Sub

    Häufige Fehler und Lösungen

    • Fehler: Der Winkel wird immer nur bis 180° berechnet.

      • Lösung: Verwende für die Berechnung des zweiten Winkels die Formel Winkel2 = 360° - Winkel1, um den korrekten Winkel zu erhalten.
    • Fehler: Excel zeigt "Wert!" an.

      • Lösung: Überprüfe die Eingabewerte, insbesondere die Streckenlängen, um sicherzustellen, dass sie korrekt berechnet werden.

    Alternative Methoden

    Eine alternative Methode zur Winkelberechnung in Excel besteht darin, die ARCCOS-Funktion direkt zu verwenden, um die Berechnung zu vereinfachen. Hierbei ist jedoch darauf zu achten, dass du die richtigen Argumente übergibst.

    WinkelA = Application.WorksheetFunction.Acos((c(1) ^ 2 + c(2) ^ 2 - b(1) ^ 2) / (2 * c(1) * c(2))) * (180 / Pi)

    Praktische Beispiele

    Wenn du beispielsweise den Winkel zwischen den Punkten (1,1), (2,2) und (3,3) berechnen möchtest, kannst du die oben genannte Methode verwenden. Stelle sicher, dass die Punkte in der richtigen Reihenfolge eingegeben werden, um die korrekten Ergebnisse zu erhalten.


    Tipps für Profis

    • Nutze die VBA-Funktion Application.WorksheetFunction.Acos, um die Lesbarkeit deines Codes zu verbessern.
    • Achte darauf, dass alle Eingabewerte in Excel korrekt formatiert sind, um Fehler bei der Winkelberechnung zu vermeiden.
    • Verwende Debugging-Tools in VBA, um Fehler schneller zu identifizieren.

    FAQ: Häufige Fragen

    1. Warum kommt es zu falschen Werten bei der Winkelberechnung? Die häufigste Ursache ist eine falsche Eingabe der Distanzwerte oder die Verwendung einer falschen Formel. Überprüfe deine Berechnungen mithilfe des Cosinussatzes.

    2. Wie kann ich negative Winkel berechnen? Für negative Winkel kannst du die Berechnung anpassen, indem du die Bedingung hinzufügst, dass der Winkel im Uhrzeigersinn berechnet wird.

    3. Welche Excel-Version benötige ich für diese VBA-Methoden? Die beschriebenen Methoden funktionieren in den meisten modernen Versionen von Excel, die VBA unterstützen, einschließlich Excel 2010 und neuer.

    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