Как преобразовать величины углов, выраженные в градусах/минутах/секундах, в десятичные величины и обратно в 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

Для использования этой функции создайте формулу перевода, например:

  1. Запустите Excel и нажмите клавиши ALT+F11, чтобы запустить редактор Visual Basic.

  2. В меню Вставка выберите Модуль.

  3. Введите в модуле приведенный выше код пользовательской функции Convert_Degree.

  4. Нажмите ALT+F11 для возвращения в Excel.

  5. В ячейке A1 введите значение 10,46.

  6. В ячейке 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

Для использования этой функции создайте формулу перевода, например:

  1. Запустите Excel и нажмите клавиши ALT+F11, чтобы запустить редактор Visual Basic.

  2. В меню Вставка выберите Модуль.

  3. Введите в модуле приведенный выше код пользовательской функции Convert_Decimal.

  4. Нажмите ALT+F11 для возвращения в Excel.

  5. В ячейке A1 введите следующую формулу:

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

    Примечание.

    В конце аргумента этой формулы необходимо вести три двойных кавычки ("""), таким образом, взяв в кавычки значение секунд. Ссылка на ячейку не требует кавычек.

  6. В данном примере формула возвращает значение 10.46.