Como sumar grados, min, seg, en excel

Respuesta de
a
Usuario

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

Avatar
Experto

¡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.

 

Avatar
Experto

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.

Avatar
Experto

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.

Avatar
Experto

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.

Avatar
Experto

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

Usuario

gracias por darte la molestia de responder lo q pasa es q estuve esperando la respuesta y como tardaste ..  ya hasta casi la había olvidado .. pero gracias