Avatar billede folj Forsker
07. juni 2016 - 13:21 Der er 1 kommentar og
1 løsning

Funktion returnerer ikke korrekt.

Jeg har et tidsstaempel stående i celle A15. Det er altid en hel klokketime der spørges på.

Med en funktion vil jeg teste om der er produktion den pågældende time.
alle satrt og sluttider har jeg stående i arket Pplan, kolonne F og kolonne J.
Derfor kommer mit funktionskal til at se således ud:
=ProductionThisHour($A15;'Pplan'!F17:F49;'Pplan'!J17:J49)


Problemet er at den returnerer korrekt værdi til og med i dag kl 14:00.

for de efterfølgende timer returnerer den værdien 0, på trods af at tidspunktet 2016-06-07 14:00 ikke står i planen. der er altså ikke nogen produktion der starter op, eller lukker ned på dette klokkeslet.

Derimod er det en produktion der strækker sig over flere døgn, men lige nøjagtig efter forspørgslen kl. 14:00 returnerer den ikke længere at der er produktion.

Her kommer min Funktion:
Function ProductionThisHour(RequestDate As Date, StartDateArray As Range, EndDateArray As Range)
' function bruges til at teste om der er produktion den forespurgte time - tester om RequestDate (tidsstemplet) er større end starttidspunkt og mindre end sluttidstpunkt - for så er vi i produktion

' SDate og EDate er hhv starttid og sluttid for en produktion (en batch) hentet ind fra vores produktionsplan
Dim sDate As Date
Dim EDate As Date
Dim i As Integer ' blot det tal vi bruger i vores For-løkke når vi looper igennem alle rækken af planlagte produktioner
    ProductionThisHour = 0 ' sætter defaultværdi til 0, så function returenerer 0, hvis der ikke blev fundet nogen produktion på RequestDate

For i = 1 To StartDateArray.Cells.Count ' vi løber vores StartDateArray igennem med en For-løkke
  If IsDate(StartDateArray.Cells(i, 1)) Then ' hvis der findes en dato i array
    sDate = StartDateArray.Cells(i, 1) ' hvis der findes en startdato i StartDateArray, så putter vi værdien i variablen SDate
    EDate = EndDateArray.Cells(i, 1) ' og så henter vi slutdato på samme række i EndDateArray
   
'Herunder tjekkes for om der er planlagt produktion den time der forespørges på
    If RequestDate >= sDate Then 'Hvis RequestDate er større end startdate
      If RequestDate <= EDate Then 'Hvis RequestDate er mindre end slutdate
        ProductionThisHour = ProductionThisHour + 1  ' og vi returnerer værdien 1
      End If ' slut på hvis mindre end slutdate
    End If ' slut på hvis større end startdate
  End If ' slut på hvis der findes en dato
Next i

End Function
Avatar billede folj Forsker
13. juni 2016 - 10:24 #1
Så fandt jeg selv fejlen...

Det var selvfølgelig den oplagte at jeg i min forespørgsel ikke har fået sat de dollartegn, den gør at når man kopierer cellen nedad, så skal dataområdet forblive uændret.


Derfor kom mit funtionskald fra ovenstående eksempel,til at se således ud:
=ProductionThisHour($A15;'Pplan'!$F17:$F49;'Pplan'!$J17:$J49)

spørgsmålet lukkes... men hvordan gør man det ?
Avatar billede folj Forsker
13. juni 2016 - 10:27 #2
Så fand jeg også ud af hvordan jeg likker spørgsmålet.
Når kommentaer er skrevet, har spørgsmålsopretter mulighed for at markere kommentaren som løsning.
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