Cómo convertir ángulos en grados/minutos/segundos hacia o desde ángulos decimales en Excel

Resumen

Las medidas angulares suelen expresarse en unidades de grados, minutos y segundos (DMS). 1 grado es igual a 60 minutos y un minuto es igual a 60 segundos. Para simplificar algunos cálculos matemáticos, es posible que desee expresar medidas angulares en grados y fracciones decimales de grados.

Este artículo contiene una función personalizada de muestra que puede usar para convertir un valor de grado almacenado en formato decimal, en DMS almacenado en formato de texto y una función de ejemplo que convierte DMS en un valor de grado almacenado en formato decimal.

Más información

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía tanto expresa como implícita, incluyendo, pero sin limitarse, a las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. En este artículo se da por supuesto que ya conoce el lenguaje de programación que se muestra, así como las herramientas empleadas para crear y depurar procedimientos. Los profesionales de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos adaptados a sus necesidades específicas.

Si su experiencia en el campo de la programación es limitada, puede ser aconsejable ponerse en contacto con Microsoft Advisory Services. Para más información, visite el sitio web de Microsoft:

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

Para obtener más información acerca de las opciones de soporte técnico disponibles y cómo ponerse en contacto con Microsoft, consulte https://support.microsoft.com.

Convertir grados decimales en grados/minutos/segundos

La siguiente función personalizada de Microsoft Visual Basic para Aplicaciones acepta un ángulo con formato decimal y lo convierte en un valor de texto mostrado en grados, minutos y segundos.

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

Para usar esta función, cree una fórmula de conversión, como en el ejemplo siguiente:

  1. Inicie Excel y presione ALT+F11 para iniciar el Editor de Visual Basic.

  2. En el menú Insertar, haga clic en Módulo.

  3. Escriba el código de muestra de la función personalizada de Convert_Degree descrita anteriormente en la hoja de módulos.

  4. Presione Alt+F11 para volver a Excel.

  5. En la celda A1, escriba 10.46.

  6. En la celda A2, escriba la fórmula: =Convert_Degree(A1)

    La fórmula devuelve 10°27'36"

Convertir grados/minutos/segundos en grados decimales

La siguiente función personalizada de Microsoft Visual Basic para Aplicaciones acepta una cadena de texto de grados, minutos y segundos con el mismo formato que devuelve la función Convert_Degree (por ejemplo, 10° 27' 36") y la convierte en un ángulo con formato decimal. Esto es exactamente lo contrario de la función personalizada de Convert_Degree.

Advertencia

Esta función personalizada falla si el argumento Degree_Deg no está en el formato <grados>° <minutos>' <segundos>" incluso si el valor de segundos es 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

Para usar esta función, cree una fórmula de conversión, como en el ejemplo siguiente:

  1. Inicie Excel y presione ALT+F11 para iniciar el Editor de Visual Basic.

  2. En el menú Insertar, haga clic en Módulo.

  3. Escriba el código de muestra de la función personalizada de Convert_Decimal descrita anteriormente en la hoja de módulos.

  4. Presione Alt+F11 para volver a Excel.

  5. En la celda A1, escriba la fórmula siguiente:

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

    Nota:

    Debe escribir tres comillas (""") al final del argumento de esta fórmula para equilibrar las comillas de los segundos y las de la cadena de texto. Una referencia de celda no requerirá comillas.

  6. La fórmula devuelve 10.46