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

1 respuesta

Respuesta
1

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.

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.

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

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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas