1. AyudaExcel utiliza cookies. Si continuas utilizando AyudaExcel, estás aceptando la utilización de nuestras cookies. Más información.
  2. ¡Bienvenid@ a AyudaExcel! El foro más visitado sobre Excel en habla hispana.

    Si esta es tu primera visita, asegúrate de revisar los temas de la sección Utilización y Funcionamiento para familiarizarte con las funciones del foro. Si deseas publicar mensajes, será necesario que te Registres para que puedas dejar respuestas y crear tus propios mensajes, recuerda que es gratuito.

Solucionado Transformación a segundos con 2 dígitos decimales

Tema publicado en 'Temas resueltos' iniciado por aspirino00, 22 Ene 2009.

Estado del tema:
Cerrado para nuevas respuestas
  1. aspirino00

    aspirino00 Nuevo Usuario

    Registrado:
    22 Ene 2009
    Mensajes:
    4
    Me Gusta recibidos:
    0
    Hola, he encontrado esta macro para transformar grados decimales a 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

    Funciona perfectamente, el problema es que me gustaría recibir todo igual pero los segundos con 2 decimales (la función sólo devuelve segundos sin decimales). ?Cómo podría cambiar la macro para conseguirlo? Muchas gracias.
  2. ioyama

    ioyama Moderador Staff AyudaExcel

    Registrado:
    24 Jun 2008
    Mensajes:
    4.592
    Me Gusta recibidos:
    350
    Hola aspirino00

    Prueba con

    Seconds = Format(((Minutes - Int(Minutes)) * 60), "0.00")

    en lugar del actual

    Seconds = Format(((Minutes - Int(Minutes)) * 60), "0")

    Un saludo desde Vitoria
  3. aspirino00

    aspirino00 Nuevo Usuario

    Registrado:
    22 Ene 2009
    Mensajes:
    4
    Me Gusta recibidos:
    0
    Hey, muchas gracias, funciona perfectamente. Un saludo desde Alemania ;)
  4. aspirino00

    aspirino00 Nuevo Usuario

    Registrado:
    22 Ene 2009
    Mensajes:
    4
    Me Gusta recibidos:
    0
    Perdona Ioyama, pero ahora tengo el problema contrario con otra macro que hace lo contrario:

    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.
    degrees = Val(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 = Val(Mid(Degree_Deg, InStr(1, Degree_Deg, "°") + 2, _
    InStr(1, Degree_Deg, "'") - InStr(1, Degree_Deg, _
    "°") - 2)) / 60
    ' Set seconds to the number to the right of "'" that is
    ' converted to a value and then divided by 3600.
    seconds = Val(Mid(Degree_Deg, InStr(1, Degree_Deg, "'") + _
    2, Len(Degree_Deg) - InStr(1, Degree_Deg, "'") - 2)) _
    / 3600
    Convert_Decimal = degrees + minutes + seconds
    End Function

    Pensaba que si escribía la entrada con números decimales lo tenía en cuenta, pero solo lo calcula para valores mayores o iguales que 01,00" (por ejemplo no funciona con 00,99"). ?Como cambio el código? Muchas gracias e nuevo y perdón por las molestias :)
  5. ioyama

    ioyama Moderador Staff AyudaExcel

    Registrado:
    24 Jun 2008
    Mensajes:
    4.592
    Me Gusta recibidos:
    350
    Hola aspirino00

    CÓDIGO:
    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.
    degrees = Val(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 = Val(Mid(Degree_Deg, InStr(1, Degree_Deg, "°") + 2, _
    InStr(1, Degree_Deg, "'") - InStr(1, Degree_Deg, _
    "°") - 2)) / 60
    ' Set seconds to the number to the right of "'" that is
    ' converted to a value and then divided by 3600.
    [COLOR="Blue"]seconds = Mid(Degree_Deg, InStr(1, Degree_Deg, "'") + _
        2, Len(Degree_Deg) - InStr(1, Degree_Deg, "'") - 2) / 3600[/COLOR]
    Convert_Decimal = degrees + minutes + seconds
    End Function
    
    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
    [COLOR="Blue"]seconds = Format(((minutes - Int(minutes)) * 60), "#.##")[/COLOR]
    '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
    He introducido un par de cambios (en azul), de todas las maneras si pones un valor en una celda y a contiuación pasas a sexagesimal y este lo vuelves a pasar a decimal, éste último no te coincidirá con el primero, ya que hemos cortado los decimales en el paso a sexagesimal en 2, por lo que habrá un desfase en la milésima.

    Un saludo desde Vitoria
  6. aspirino00

    aspirino00 Nuevo Usuario

    Registrado:
    22 Ene 2009
    Mensajes:
    4
    Me Gusta recibidos:
    0
    Muchas gracias de nuevo, todo funciona ;)
Estado del tema:
Cerrado para nuevas respuestas

Compartir esta página