langhåret og kompliceret IF-sætning VBA-Excel
Hej venner på eksperten.dkJeg har en funktion der fungerer fint nu hvor den kun arbejder med en ret simpel, og let forståelig IF-sætning
Problemet er at jeg har behov for at udbygge if-sætningen til en noget mere langhåret og kompliceret.
Jeg gennemløber nogle start- og sluttidspunkter for produktionsbatche.
Funktionen skal ud fra en forespørgselsdato (RequestDate) beregne om der er produktion hele dagen eller dele af dagen.
Da mine RequestDate kun er datoer vil der altid blive spurgt på RequestDate klokken 00:00 altså det klokkeslet døgnet starter.
I øjeblikket beregner min IF-sætning kun om det er et helt produktionsdøgn.
Jeg har brug for at udbygge den så den kan beregne hvor stor en del af døgnet der produceres
Der returneres talværdien 1 for et helt døgn, og skal tilsvarende returneres 0,5 hvis der produceres 12 timer eller 0,25 hvis der produceres 6 timer.
Altså en faktor som jeg kan gange op med når jeg skal estimere dagens råvareforbrug eller dagens produktion.
Min nuværende simple function ser således ud:
Function InProduction(RequestDate As Date, StartDateArray As Range, EndDateArray As Range)
' function skal teste om RequestDate er større end starttidspunkt og mindre end sluttidstpunkt - for så er vi i produktion
Dim SDate As Date
Dim EDate As Date
Dim i As Integer
InProduction = 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
If RequestDate >= SDate Then ' hvis starten af Requestdate-døgnet er større end starttidspunkt,
If RequestDate <= EDate Then ' og mindre end sluttidstpunkt - så er vi i produktion (hele døgnet)
InProduction = 1 ' og vi vil returnere værdien 1
End If ' afslutter hvis både starten og slutningen af Requestdate-døgnet er større end starttidspunkt, så har vi produktion (hele døgnet)
End If ' afslutter hvis starten af Requestdate-døgnet er større end starttidspunkt, så har vi produktion (helt eller delvist døgn)
End If ' afslutter hvis der findes en dato
Next i
End Function
' function skal teste om RequestDate er større end starttidspunkt og mindre end sluttidstpunkt - for så er vi i produktion
Dim SDate As Date
Dim EDate As Date
Dim i As Integer
InProduction = 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
If RequestDate >= SDate Then ' hvis starten af Requestdate-døgnet er større end starttidspunkt,
If RequestDate <= EDate Then ' og mindre end sluttidstpunkt - så er vi i produktion (hele døgnet)
InProduction = 1 ' og vi vil returnere værdien 1
End If ' afslutter hvis både starten og slutningen af Requestdate-døgnet er større end starttidspunkt, så har vi produktion (hele døgnet)
End If ' afslutter hvis starten af Requestdate-døgnet er større end starttidspunkt, så har vi produktion (helt eller delvist døgn)
End If ' afslutter hvis der findes en dato
Next i
End Function
i øjeblikket returnerer den 1 hvis det er en HEL produktionsdag, ellers returnerer den 0, også hvis det er den delvis produktionsdag.
Er der en ekspert der har det fornødne overblik det kræver at strikke en så langhåret IF-sætning sammen ?
