Avatar billede larsgrau Forsker
04. januar 2017 - 20:10 Der er 16 kommentarer og
2 løsninger

Position konverter

Hej

Jeg har denne kode til at konverter decimalgrader til grader minutter sekunder.

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

Den virker også godt nok hvis man skal konverter nord og øst grader, men når man skal konverter syd og west decimalgrader kniber det noget.

eks.
10,4646 bliver til  10° 27' 53", men hvis man skriver -10,4646 så bliver det til  -11° 32' 7", men du skulle være  10°27'52.56, nogen som har en ide til at løse det ?
Avatar billede kabbak Professor
04. januar 2017 - 20:56 #1
Avatar billede ebea Ekspert
04. januar 2017 - 22:42 #2
Avatar billede larsgrau Forsker
05. januar 2017 - 08:13 #3
Jeg kan ikke downloaded den
Avatar billede ebea Ekspert
05. januar 2017 - 08:31 #4
#3  -  Jeg kan ikke se nogen fejl i Linket, så jeg ved ikke lige hvad der skulle være problemet.
Du kan evt. give mig din email, så skal jeg sende den til dig. Du kan gøre det, ved at sende mig en besked, på min brugerprofil, med din email.
Avatar billede larsgrau Forsker
05. januar 2017 - 09:18 #5
lars(a)famgrau.dk
Avatar billede Dan Elgaard Ekspert
05. januar 2017 - 16:02 #6
Function CCD(ByVal DecimalDegree As Double) As String

        D = Int(Abs(DecimalDegree))
        M = (Abs(DecimalDegree) - D) * 60
        S = Format(((M - Int(M)) * 60), "0")
        CCD = D & "° " & Int(M) & "' " & S + Chr(34)

End Function
Avatar billede larsgrau Forsker
11. januar 2017 - 14:53 #7
Hej Ebea

det virker i excel, men grunden til at jeg gerne ville have det som funktion er så skal man ikke tænke og felter i ens indtastning
Avatar billede ebea Ekspert
11. januar 2017 - 15:01 #8
#7  -  Det som du skriver, forstår jeg ikke rigtig! Det eksempel jeg sendte dig (som formel), gør jo netop, at du kun skal indtaste decimal grader, og så laver formlen det som du efterlyste, (Grader, minutter og sekunder), og ydermere fortæller den om du er på den Nordlige / Sydlige halvkugle, og om du er Øst / Vest.
Avatar billede larsgrau Forsker
11. januar 2017 - 16:07 #9
Det er rigtigt den virker som formular,  men jeg vil gerne have det som funktion som jeg skrive i mit indlæg
Avatar billede ebea Ekspert
11. januar 2017 - 16:47 #10
Så brug denne i stedet! Den regner korrekt, ved Minus angivelser!

Function Convert_Degree(Decimal_Deg) As Variant
   
    Dim degrees As Variant
    Dim minutes As Variant
    Dim seconds As Variant
    Dim Neg As Boolean
       
        Neg = Decimal_Deg < 0
        Decimal_Deg = Abs(Decimal_Deg)
       
        '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.000")
        'Returns the Result of degree conversion
      '(for example, 10.46 = 10~ 27  ' 36")
        Convert_Degree = IIf(Neg, "-", "") & " " & degrees & "° " & Int(minutes) & "' " _
            & seconds + Chr(34)
   
End Function
Avatar billede Dan Elgaard Ekspert
11. januar 2017 - 16:53 #11
Hvad er der i vejen med den funktion, som jeg gav???
Avatar billede larsgrau Forsker
11. januar 2017 - 18:26 #12
Ikke noget jeg var bare ikke kommet til at svare, den virker som den skal takker
Avatar billede Dan Elgaard Ekspert
11. januar 2017 - 19:58 #13
Velbekomme :-)
Avatar billede larsgrau Forsker
17. januar 2017 - 15:41 #14
Jeg har lige et spørgsmål

Kan man få den til at skrive  57° 07' 16N så hvis minutes er under 10, så skal den skrive 0 foran tallet?

Jeg har prøver denne men den virker ikke helt

Function Convert_Degree(Decimal_Deg) As Variant
   
    Dim degrees As Variant
    Dim minutes As Variant
    Dim seconds As Variant
    Dim Neg As Boolean
       
        Neg = Decimal_Deg < 0
        Decimal_Deg = Abs(Decimal_Deg)
       
        '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 = Format(((Decimal_Deg - degrees) * 60), "00")
        'Set seconds to 60 times the number to the right of the
        'decimal for the variable Minute
        seconds = Format(((minutes - Int(minutes)) * 60), "00")
        'Returns the Result of degree conversion
      '(for example, 10.46 = 10~ 27  ' 36")
        Convert_Degree = IIf(Neg, "-", "") & " " & degrees & "° " & Int(minutes) & "' " _
            & seconds + Chr(34)
   
End Function
Avatar billede ebea Ekspert
17. januar 2017 - 17:02 #15
#14  -  Du kan bruge opsætningen, fra de formler jeg sendte dig. Der kan du se hvordan det er opsat ;-)
Avatar billede larsgrau Forsker
17. januar 2017 - 20:11 #16
Sådan her så virker den også med format af tallet på position "1 og 2" og "3 og 4"

Function Convert_DegreeS(Decimal_Deg) As Variant
   
    Dim degrees As Variant
    Dim degrees_for As Variant
    Dim minutes As Variant
    Dim minutes_for As Variant
    Dim seconds As Variant
    Dim Neg As Boolean
       
        Neg = Decimal_Deg < 0
        Decimal_Deg = Abs(Decimal_Deg)
       
        'Set degree to Integer of Argument Passed
        degrees = Int(Decimal_Deg)
        degrees_for = Format(Int(Decimal_Deg), "000")
        'Set minutes to 60 times the number to the right
        'of the decimal for the variable Decimal_Deg
        minutes = (Decimal_Deg - degrees) * 60
        minutes_for = Format(((Decimal_Deg - degrees) * 60), "00")
        'Set seconds to 60 times the number to the right of the
        'decimal for the variable Minute
        seconds = Format(((minutes - Int(minutes)) * 60), "00")
        'Returns the Result of degree conversion
      '(for example, 10.46 = 10~ 27  ' 36")
        Convert_DegreeS = IIf(Neg, "", "") & " " & degrees_for & "° " & minutes_for & "' " _
            & seconds + Chr(34) & "S"
   
End Function
Avatar billede larsgrau Forsker
22. januar 2017 - 10:52 #17
Hej Igen

kan man får den til at lade være med at runde tal op og ned, da det betyder en hel del med hensyn til positionen,

Hvis man regner med decimal graden 10.5757 så skal den rigtige position være
10° 34' 32"N, men den kommer med  10° 35' 32,52"N og i dette tilfælde er det ca. 0,7 mil(1296 meter) og det der meget ved siden af. nogen som har en ide til at runde minutes ned til et helt tal hver gang?
Avatar billede ebea Ekspert
22. januar 2017 - 11:14 #18
Det er fordi, at du har en fejl i din kode!
Hvis du kører koden som jeg lagde i #10, vil du se, at den beregner korrekt!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester