Konvertera vinklar för grader/minuter/sekunder till eller från decimalvinklar i Excel

Sammanfattning

Vinkelmått uttrycks ofta i enheter med grader, minuter och sekunder (DMS). 1 grad är lika med 60 minuter och en minut är lika med 60 sekunder. För att förenkla vissa matematiska beräkningar kanske du vill uttrycka vinkelmått i grader och decimaltal av grader.

Den här artikeln innehåller ett exempel på en anpassad funktion som du kan använda för att konvertera ett gradvärde som lagras i decimalformat, till DMS som lagras i textformat och en exempelfunktion som konverterar DMS till ett gradvärde som lagras i decimalformat.

Mer information

Microsoft tillhandahåller endast programmeringsexempel, utan garanti, antingen uttryckta eller underförstådda, inklusive, men inte begränsade till, de implicita garantierna för säljbarhet och/eller lämplighet för ett visst ändamål. I denna artikel förutsätts det att du känner till det programmeringsspråk som demonstreras och de verktyg som används för att skapa samt felsöka procedurer. Microsofts supportexperter kan hjälpa till att förklara funktionerna i en viss procedur, men de kommer inte att ändra dessa exempel för att tillhandahålla extra funktioner eller konstruera procedurer för att uppfylla dina specifika behov.

Om du har begränsad programmeringserfarenhet kanske du vill kontakta Microsoft Advisory Services. Mer information finns på Microsoft-webbplats:

Microsoft Advisory Services – https://support.microsoft.com/gp/advisoryservice

Mer information om de supportalternativ som är tillgängliga och om hur du kontaktar Microsoft finns på https://support.microsoft.com.

Konvertera decimalgrader till grader/minuter/sekunder

Följande anpassade Microsoft-Visual Basic for Applications accepterar en vinkel formaterad som ett decimalvärde och konverterar den till ett textvärde som visas i grader, minuter och sekunder.

Function Convert_Degree(Decimal_Deg) As Variant
    With Application
        'Set degree to Integer of Argument Passed
        Degrees = Int(Decimal_Deg)
        'Set minutes to 60 times the number to the right
        'of the decimal for the variable Decimal_Deg
        Minutes = (Decimal_Deg - Degrees) * 60
        'Set seconds to 60 times the number to the right of the
        'decimal for the variable Minute
        Seconds = Format(((Minutes - Int(Minutes)) * 60), "0")
        'Returns the Result of degree conversion
        '(for example, 10.46 = 10~ 27  ' 36")
        Convert_Degree = " " & Degrees & "° " & Int(Minutes) & " ' " & Seconds + Chr(34)
    End With
End Function

Om du vill använda den här funktionen skapar du en konverteringsformel, som i följande exempel:

  1. Starta Excel och tryck på ALT+F11 för att starta Visual Basic Editor.

  2. Klicka på Modul på Infoga-menyn.

  3. Ange exempelkoden för den anpassade funktionen Convert_Degree som beskrivs ovan i modulbladet.

  4. Tryck på ALT+F11 för att återgå till Excel.

  5. I cell A1 skriver du 10,46.

  6. I cell A2 skriver du formeln: =Convert_Degree(A1)

    Formeln returnerar 10°27'36"

Konvertera grader/minuter/sekunder till decimalgrader

Följande anpassade Microsoft Visual Basic for Applications-funktion accepterar en textsträng med grader, minuter och sekunder formaterade i exakt samma format som funktionen Convert_Degree returnerar (till exempel 10° 27' 36") och konverterar den till en vinkel formaterad som ett decimalvärde. Detta är exakt motsatsen till den anpassade funktionen Convert_Degree.

Varning

Den här anpassade funktionen misslyckas om argumentet Degree_Deg inte är i formatet <degrees>° <minutes's <>seconds>" även om sekundvärdet är 0.

Function Convert_Decimal(Degree_Deg As String) As Double
    ' Declare the variables to be double precision floating-point

   Dim degrees As Double
   Dim minutes As Double
   Dim seconds As Double
   ' Set degree to value before "°" of Argument Passed.
   Degree_Deg = Replace(Degree_Deg, "~", "°")


   degrees = CDbl(Left(Degree_Deg, InStr(1, Degree_Deg, "°") - 1))
   ' Set minutes to the value between the "°" and the "'"
   ' of the text string for the variable Degree_Deg divided by
   ' 60. The Val function converts the text string to a number.
   minutes = CDbl(Mid(Degree_Deg, InStr(1, Degree_Deg, "°") + 1, _
             InStr(1, Degree_Deg, "'") - InStr(1, Degree_Deg, "°") - 1)) / 60
   ' Set seconds to the number to the right of "'" that is
   ' converted to a value and then divided by 3600.
   seconds = CDbl(Mid(Degree_Deg, InStr(1, Degree_Deg, "'") + _
           1, Len(Degree_Deg) - InStr(1, Degree_Deg, "'") - 1)) / 3600

   Convert_Decimal = degrees + minutes + seconds

End Function

Om du vill använda den här funktionen skapar du en konverteringsformel, som i följande exempel:

  1. Starta Excel och tryck på ALT+F11 för att starta Visual Basic Editor.

  2. Klicka på Modul på Infoga-menyn.

  3. Ange exempelkoden för den anpassade funktionen Convert_Decimal som beskrivs ovan i modulbladet.

  4. Tryck på ALT+F11 för att återgå till Excel.

  5. I cell A1 skriver du följande formel:

    =Convert_Decimal("10° 27' 36""")

    Obs!

    Du måste skriva tre citattecken (""") i slutet av argumentet för den här formeln för att balansera citattecknet för sekunderna och citattecknet för textsträngen. En cellreferens kräver inget citattecken.

  6. Formeln returneras 10,46