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:
Starta Excel och tryck på ALT+F11 för att starta Visual Basic Editor.
Klicka på Modul på Infoga-menyn.
Ange exempelkoden för den anpassade funktionen Convert_Degree som beskrivs ovan i modulbladet.
Tryck på ALT+F11 för att återgå till Excel.
I cell A1 skriver du 10,46.
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:
Starta Excel och tryck på ALT+F11 för att starta Visual Basic Editor.
Klicka på Modul på Infoga-menyn.
Ange exempelkoden för den anpassade funktionen Convert_Decimal som beskrivs ovan i modulbladet.
Tryck på ALT+F11 för att återgå till Excel.
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.
Formeln returneras 10,46
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för