Como sumar grados, min, seg, en excel

lo q pasa es que en mis trabajos de topografía .. me hace mucho lio escribir grados , min , seg....en diferentes celdas para luego convertirlas a grados ..mediante equivalencias ... y quisiera saber como sumar usando puntos por ejemplo ; 24.26.36 + 25.55.44 ....( ambos ángulos están en dif celdas ) se pude?? .. agradezco su respuesta

1

1 respuesta

1
Respuesta de

¡Hola Yoshrhp!

Habría que definir de modo exacto el sistema de escribir los ángulos. Si aparecen dos puntos ya sabemos que son grados, minutos y segundos.

¿Pero y si aparece solo 1 que son?

11.45

son grados y minutos o son minutos y segundos

Y si aparece solo un número

23

son grados o son segundos

Yo creo que sería mejor que el primer número fuese siempre grados.

Otra cosilla es si los minutos y segundos llevaran un cero delante para completar dos cifras o no

11.05.02

o

11.5.2

Esta segunda notación no es muy acertada pues puede quedar duda de si es

11.50.20

Entonces lo primero sería que fijaras las ideas.

No obstante yo voy a empezar a hacerlo por si tardas en contestar con el siguiente criterio

El primer número es siempre grados, luego si se quiere escribir 11 minutos y 9 segundos habrá que poner

0.11.9

o

0.11.09

Para poner 5 segundos

0.0.5

0.0.05

0.00.5

0.00.05

Y el segundo criterio com puedes ver es que se permite un solo número en los minutos y segundos, aunque en ola representación pondré 2 números siempre que queda más claro.

Si quieres que no sea así alguna de las cosas me lo dices.

Por supuesto que estas cuentas es pesadísimo (creo yo) hacerlas con funciones Excel, luego lo haré con una macro.

Espera a que lo haga o da tu opinión o pregunta algo mientras.

Un saludo.

Bueno ya está, tienes que hacer lo siguiente.

Supongamos que en A1 tienes un ángulo y en A2 el otro y la suma la quieres en A3.

En la casilla A3 pon esta fórmula

= SumaAngulos(A1;A2)

Y en Visual Basic crea un módulo donde pondrás esta función y subrutina.

Function SumaAngulos(a As String, b As String) As String
Call Descomponer(a, ga, ma, sa)
Call Descomponer(b, gb, mb, sb)
sa = sa + sb
If sa > 60 Then
ma = ma + Int(sa / 60)
sa = sa - 60 * Int(sa / 60)
End If
ma = ma + mb
If ma > 60 Then
ga = ga + Int(ma / 60)
ma = ma - 60 * Int(ma / 60)
End If
ga = ga + gb
If ma < 10 Then sm = ".0" Else sm = "."
If sa < 10 Then ss = ".0" Else ss = "."
SumaAngulos = ga & sm & ma & ss & sa
End Function
Sub Descomponer(ByVal a, ga, ma, sa)
Dim n, m As Integer
n = InStr(a, ".")
If n > 0 Then
ga = CDbl(Left(a, n))
a = Mid(a, n + 1)
m = InStr(a, ".")
If m > 0 Then
ma = CDbl(Left(a, m))
a = Mid(a, m + 1)
If a <> "" Then sa = CDbl(a) Else sa = 0
ElseIf m = 0 Then
If a <> "" Then ma = CDbl(a) Else ma = 0
Else
ma = 0: sa = 0
End If
ElseIf n = 0 Then
ga = CDbl(a): ma = 0: na = 0
Else
ga = 0: ma = 0: na = 0
End If
End Sub

Aunque permite introducir números decimales no transforma los décimales de los grados en minutos o los decimales de los minutos en segundos, luego solo tiene sentido y queda en forma canónica la respuesta si los décimales van en los segundos.

Pruébala y espero que te sirva.

Y eso es todo, si necesitas alguna explicación pídemela. Y si ya está bien no olvides puntuar.

Un saludo.

Perdón he tenido un par de fallos. las dos líneas que dicen

If sa > 60 Then

If ma > 60 Then

deben ser

If sa >= 60 Then

If sa >= 60 Then

Un saludo.

Espera, por el mismo precio vamos a hacerlo ya bien del todo, ahora puedes poner decimales en las grados, minutos o segundos y la macro se encargará de hacer la suma y dejar el resultado en forma canónica, donde solo quedan decimales en los segundos

Function SumaAngulos(a As String, b As String) As String
Call Descomponer(a, ga, ma, sa)
Call Descomponer(b, gb, mb, sb)
sa = sa + sb
If sa >= 60 Then
ma = ma + Int(sa / 60)
sa = sa - 60 * Int(sa / 60)
End If
ma = ma + mb
If ma >= 60 Then
ga = ga + Int(ma / 60)
ma = ma - 60 * Int(ma / 60)
End If
ga = ga + gb
If ma < 10 Then sm = ".0" Else sm = "."
If sa < 10 Then ss = ".0" Else ss = "."
SumaAngulos = ga & sm & ma & ss & sa
End Function
Sub Descomponer(ByVal a, ga, ma, sa)
Dim n, m As Integer
n = InStr(a, ".")
If n > 0 Then
ga = CDbl(Left(a, n))
a = Mid(a, n + 1)
m = InStr(a, ".")
If m > 0 Then
ma = CDbl(Left(a, m))
a = Mid(a, m + 1)
If a <> "" Then sa = CDbl(a) Else sa = 0
ElseIf m = 0 Then
If a <> "" Then ma = CDbl(a) Else ma = 0
Else
ma = 0: sa = 0
End If
ElseIf n = 0 Then
ga = CDbl(a): ma = 0: na = 0
Else
ga = 0: ma = 0: na = 0
End If
If ga <> Int(ga) Then
ma = ma + 60 * (ga - Int(ga))
ga = Int(ga)
End If
If ma <> Int(ma) Then
sa = sa + 60 * (ma - Int(ma))
ma = Int(ma)
End If
If sa >= 60 Then
ma = ma + Int(sa / 60)
sa = sa - 60 * Int(sa / 60)
End If
If ma >= 60 Then
ga = ga + Int(ma / 60)
ma = ma - 60 * Int(ma / 60)
End If
sa = Round(sa, 11)
End Sub

Y eso es todo, ya me dirás si te va bien y no olvides puntuar.

Un saludo.

Ya hace días que contesté tu pregunta. Puntúala por favor, no cuesta nada.
Un saludo.
03-06-2013.

Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje
¿No es la respuesta que estabas buscando? Puedes explorar otras preguntas del tema Microsoft Excel o hacer tu propia pregunta: