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
' 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
