Как преобразовать величины углов, выраженные в градусах/минутах/секундах, в десятичные величины и обратно в Excel
Аннотация
Углы нередко измеряются в таких единицах, как градусы, минуты и секунды (формат ГМС). 1 степень равна 60 минутам, а одна минута равна 60 секундам. Для упрощения математических расчетов вам может потребоваться выразить углы в градусах и их десятичных долях.
В данной статье приводится текст специальной функции, которую можно использовать для перевода десятичных величин градусов в формат ГМС, а также функции для перевода формата ГМС в десятичные величины.
Дополнительная информация
Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и не предоставляет явных или подразумеваемых гарантий относительно их корректной работы в конкретных случаях и в пользовательских приложениях. В этой статье предполагается, что вы знакомы с демонстрируемым языком программирования и средствами, используемыми для создания и отладки процедур. Специалисты службы поддержки Майкрософт могут помочь объяснить функциональные возможности конкретной процедуры, но они не будут изменять эти примеры, чтобы предоставить дополнительные функциональные возможности или создать процедуры в соответствии с вашими конкретными потребностями.
Чтобы получить консультацию по вопросам программирования, обратитесь в консультационную службу корпорации Майкрософт. Дополнительные сведения см. на веб-сайте корпорации Майкрософт:
Консультационные службы Microsoft — https://support.microsoft.com/gp/advisoryservice
Для получения дополнительной информации о доступных вариантах поддержки и о том, как связаться с Microsoft, см. https://support.microsoft.com.
Перевод десятичных градусов в градусы в формате ГМС
Приведенная ниже функция на языке Microsoft Visual Basic для приложений использует в качестве переменной угол в десятичной форме и переводит его в текстовый формат ГМС (градусы, минуты и секунды).
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
Для использования этой функции создайте формулу перевода, например:
Запустите Excel и нажмите клавиши ALT+F11, чтобы запустить редактор Visual Basic.
В меню Вставка выберите Модуль.
Введите в модуле приведенный выше код пользовательской функции Convert_Degree.
Нажмите ALT+F11 для возвращения в Excel.
В ячейке A1 введите значение 10,46.
В ячейке A2 введите формулу: =Convert_Degree(A1)
Формула возвращает значение 10°27'36"
Перевод величины угла в формате ГМС в десятичные градусы
Приведенная ниже функция на языке Microsoft Visual Basic для приложений использует в качестве переменной текстовую строку, включающую градусы, минуты и секунды и приведенную к формату, в котором возвращает значение функция Convert_Degree (например, 10° 27' 36"), и переводит значение угла в десятичные градусы. Эта функция является обратной по отношению к функции Convert_Degree.
Предупреждение
Эта пользовательская функция завершается сбоем, если аргумент Degree_Deg не находится в формате <секунд градусов градусов><"><>, даже если значение секунд равно 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
Для использования этой функции создайте формулу перевода, например:
Запустите Excel и нажмите клавиши ALT+F11, чтобы запустить редактор Visual Basic.
В меню Вставка выберите Модуль.
Введите в модуле приведенный выше код пользовательской функции Convert_Decimal.
Нажмите ALT+F11 для возвращения в Excel.
В ячейке A1 введите следующую формулу:
=Convert_Decimal("10° 27' 36""")
Примечание.
В конце аргумента этой формулы необходимо вести три двойных кавычки ("""), таким образом, взяв в кавычки значение секунд. Ссылка на ячейку не требует кавычек.
В данном примере формула возвращает значение 10.46.