Avatar billede hubertus Seniormester
27. oktober 2013 - 10:39 Der er 8 kommentarer og
1 løsning

subtraktion af tid - der driller

Jeg har en række tidspunkter der er af formen 07:10 i kolonnnerne L og H. jeg skal bruge forskellen på de to tidspunkter.
Det skal ske i følgende rutine:

Sub afvigelse(antal_rækker)

    For i = 2 To antal_rækker
   
    a = Range("L" & i).Value           
    b = Range("H" & i).Value
   
    If a < b Then   
        Range("m" & i) = 0
    Else
        Range("m" & i) = a - b
    End If
           
    Next

End Sub

Jeg får ikke de korrekte forskell. Hvad går galt?
Avatar billede finb Ekspert
27. oktober 2013 - 12:12 #1
din
.Value
skal formatteres som tid
Avatar billede hubertus Seniormester
27. oktober 2013 - 13:20 #2
Den har jeg prøvet, men med samme resultat. Jeg har imidlertid løst problemet på anden vis, men tak for input alligevel.
Avatar billede jens48 Ekspert
27. oktober 2013 - 20:40 #3
Du har ikke defineret antal rækker og overskriften er forkert. prøv med:

Sub afvigelse()
antal_rækker = Range("L65536").End(xlUp).Row
For i = 2 To antal_rækker
    a = Range("L" & i).Value
    b = Range("H" & i).Value
    If a < b Then
      Range("m" & i) = 0
    Else
      Range("m" & i) = a - b
    End If
    Next
End Sub
27. oktober 2013 - 22:13 #4
Jeg ville gribe den an således (beklager jeg koder på engelsk)

Når du sender numberOfRows til Sub'en, så kan der opstå fejl, fordi du blander rækkenummer og antal rækker sammen - derfor har jeg tilføjet +1 til numberOfRows.

Public Sub Deviation(numberOfRows As Long)
    Dim lRow As Long
    For lRow = 2 To numberOfRows + 1
        Range("M" & CStr(lRow)).Value = WorksheetFunction.Max(0, _
            Range("L" & CStr(lRow)).Value - Range("H" & CStr(lRow)).Value)
    Next lRow
End Sub
27. oktober 2013 - 22:16 #5
Ovenstående returnerer 0,375 eller 9 timer, hvis du vil have returneret tallet 9, så gang resultatet med 24, som her

Public Sub Deviation(numberOfRows As Long)
    Dim lRow As Long
    For lRow = 2 To numberOfRows + 1
        Range("M" & CStr(lRow)).Value = WorksheetFunction.Max(0, _
            (Range("L" & CStr(lRow)).Value - Range("H" & CStr(lRow)).Value) * 24)
    Next lRow
End Sub
Avatar billede hubertus Seniormester
29. oktober 2013 - 19:57 #6
Hej Jens

Jeg har en funktion, der finder antal rækker, den er bare ikke med, da den er irrelevant i sprørgsmålet. Hvorfor mener du at overskriften er forkert?

Hej Flemming
Din rutine er helt på toppen, jeg forstår blot ikke, hvorfor der skal lægges 1 til. Jeg har ikke tidligere haft problemer med at overfører antallet af rækker på denne måde. Det er jo blot en variabel.
Da jeg fint kan indbygge din rutine i min kode, så laver jeg et spørgsmål med point. Så kan du lægge et svar der.

Sidst men ikke mindst tak for hjælpen.
29. oktober 2013 - 20:46 #7
+1 det afhænger af hvad du sender til variablen numberOfRows

Hvis du sender 11 for 11 rækker, således makro'en skulle køre fra række 2 og 11 rækker ned = 2-12, så skal du lave numberOfRows+1 ellers vil den kun køre fra 2-11

Hvis du sender nummeret på den sidste række altså 12, og makroen skal køre 2-12, så skal du ikke bruge +1

Kan det forstås?
24. november 2013 - 10:15 #8
Fik du det løst?
Avatar billede hubertus Seniormester
24. november 2013 - 15:59 #9
Ja jeg fik løst min opgave.
Tak for hjælpen :0))
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