Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Excel VBA] Problemen met IF Statements tussen 2 tijdwaardes

Pagina: 1
Acties:

  • Da_maniaC
  • Registratie: September 2004
  • Laatst online: 11-11 16:12

Da_maniaC

a.k.a. The Sequenz Pounder

Topicstarter
Goedemorgen,

Ik blijf maar worstelen met een If statement om oa. een bepaling tussen twee tijdwaardes op orde te krijgen.

Zie mijn volgende code svp:
code:
1
2
3
4
5
6
7
                    'Hier volgt een extra Offset op de DienstWeekCodes ivm juist herleiden van de Nacht diensten
 If DienstWeekCode = "04" And (Format(InvoerTime, "HH:MM") >= TimeValue("00:00") Or Format(InvoerTime, "HH:MM") <= TimeValue("06:59")) Then DienstWeekCode = "01"
 If DienstWeekCode = "07" And (Format(InvoerTime, "HH:MM") >= TimeValue("00:00") Or Format(InvoerTime, "HH:MM") <= TimeValue("06:59")) Then DienstWeekCode = "04"
 If DienstWeekCode = "10" And (Format(InvoerTime, "HH:MM") >= TimeValue("00:00") Or Format(InvoerTime, "HH:MM") <= TimeValue("06:59")) Then DienstWeekCode = "07"
 If DienstWeekCode = "13" And (Format(InvoerTime, "HH:MM") >= TimeValue("00:00") Or Format(InvoerTime, "HH:MM") <= TimeValue("06:59")) Then DienstWeekCode = "10"
 If DienstWeekCode = "16" And (Format(InvoerTime, "HH:MM") >= TimeValue("00:00") Or Format(InvoerTime, "HH:MM") <= TimeValue("06:59")) Then DienstWeekCode = "13"
 If DienstWeekCode = "19" And (Format(InvoerTime, "HH:MM") >= TimeValue("00:00") Or Format(InvoerTime, "HH:MM") <= TimeValue("06:59")) Then DienstWeekCode = "16"


De bedoeling is eigenlijk dat, indien bijv. DienstWeekCode "07" is en de gekozen tijd tussen 00:00u en 06:59u ligt, de DienstWeekCode "04" wordt. Maar mijn statements lijken niet helemaal correct te werken.
Heeft iemand misschien een idee wat ik verkeerd doe?

[ Voor 3% gewijzigd door Da_maniaC op 05-01-2017 10:37 ]

Inventory | Instagram: @sequenzpounder | http://www.zdaemon.org | ZDaemon! Client/Server port for DOOM!


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Hier zeg je 'en':
tussen 00:00u en 06:59u
Maar hier zeg je 'of':

Visual Basic:
1
(Format(InvoerTime, "HH:MM") >= TimeValue("00:00") Or Format(InvoerTime, "HH:MM") <= TimeValue("06:59"))

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Da_maniaC
  • Registratie: September 2004
  • Laatst online: 11-11 16:12

Da_maniaC

a.k.a. The Sequenz Pounder

Topicstarter
@ kenneth: Dank voor de info! :)
Het werkt nu inderdaad. Ik zou zweren dat ik "Or" ook al had getest en foutieve resultaten kreeg, maar toch gaat het nu goed.

@Roblll: tja sorry, ik vond het wat lastig aangezien VBA ook een programmeertaal was.

Inventory | Instagram: @sequenzpounder | http://www.zdaemon.org | ZDaemon! Client/Server port for DOOM!


  • Da_maniaC
  • Registratie: September 2004
  • Laatst online: 11-11 16:12

Da_maniaC

a.k.a. The Sequenz Pounder

Topicstarter
Kennelijk heb ik toch nog een (afwijkende) statement die niet lijkt te werken.
Zelfs in break/debug modus lijkt de statement als TRUE gevalideerd te worden, maar is de uitkomst kennelijk toch FALSE.

De statement heb ik in 2 verschillende smaken geprobeerd.

Versie 1:
code:
1
2
3
4
5
6
7
                    If DienstWeekCode = "01" And (Format(InvoerTime, "HH:MM") >= TimeValue("20:00") And Format(InvoerTime, "HH:MM") <= TimeValue("23:59")) Then
                        InvoerWeekCorr = Format(InvoerWeek + 1, "00")
                        Sorteercode = InvoerYear & InvoerWeekCorr & DienstWeekCode & Regelnr
                    Else
                    Sorteercode = InvoerYear & InvoerWeek & DienstWeekCode & Regelnr    'Een Sorteercode wordt gegenereerd, om later eenvoudig te kunnen sorteren
                    End If
                    ThisWorkbook.Sheets("Data Invoer").Range("AJ" & LastRowInvoer) = Sorteercode


Versie 2:
code:
1
2
3
4
5
6
7
                    If InvoerWeekDay = "7" And (Format(InvoerTime, "HH:MM") >= TimeValue("20:00") And Format(InvoerTime, "HH:MM") <= TimeValue("23:59")) Then
                        InvoerWeekCorr = Format(InvoerWeek + 1, "00")
                        Sorteercode = InvoerYear & InvoerWeekCorr & DienstWeekCode & Regelnr
                    Else
                    Sorteercode = InvoerYear & InvoerWeek & DienstWeekCode & Regelnr    'Een Sorteercode wordt gegenereerd, om later eenvoudig te kunnen sorteren
                    End If
                    ThisWorkbook.Sheets("Data Invoer").Range("AJ" & LastRowInvoer) = Sorteercode


Als ik beide statements in break-modus doorneem, lijkt deze TRUE te zijn:
Afbeeldingslocatie: https://tweakers.net/ext/f/HjjDBPPAxr85My5xDdLyk216/full.jpg

Help :?

Inventory | Instagram: @sequenzpounder | http://www.zdaemon.org | ZDaemon! Client/Server port for DOOM!


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Je vergelijkt een (moeizaam) verkregen tekst met een waarde. Dat werkt niet. Alle onderstaande statements zijn waar:

10<20
'10' <'20'
10>2
'10' <'2'

Anyway, als invoertijd van het type date-time is is dit al genoeg:
Datepart("h",invoertijd)<7
Het heeft weinig zin om te controleren of een positief getal groter is dan 0 :)

[ Voor 36% gewijzigd door Lustucru op 05-01-2017 14:59 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Da_maniaC
  • Registratie: September 2004
  • Laatst online: 11-11 16:12

Da_maniaC

a.k.a. The Sequenz Pounder

Topicstarter
Lustucru schreef op donderdag 5 januari 2017 @ 14:41:
Anyway, als invoertijd van het type date-time is is dit al genoeg:
Datepart("h",invoertijd)<7
Het heeft weinig zin om te controleren of een positief getal groter is dan 0 :)
Bedankt voor je input. :) In mijn geval zou 7 echter 19 zijn vermoed? (definieer ook nergens een AM/PM notatie namelijk).

Inventory | Instagram: @sequenzpounder | http://www.zdaemon.org | ZDaemon! Client/Server port for DOOM!


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

In je openingspost heb je het over tussen middernacht en zeven uur 's ochtends.

Controleren of een tijd tussen twee uren in ligt gaat zo:
Visual Basic .NET:
1
2
3
Function TimeIsBetween(dateTime As Date, StartTime As Integer, EndTime As Integer)
    TimeIsBetween = (DatePart("H", dateTime) >= StartTime And DatePart("H", dateTime) < EndTime)
End Function


Maar zo te zien wil je meer tijdspannes controleren. Dan is een select de aangewezen weg.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Function KindOfShift(dateTime As Date) As String
    Select Case DatePart("H", dateTime)
    Case Is < 7
        KindOfShift = "Nachtdienst"
    Case Is < 12
        KindOfShift = "Ochtenddienst"
    Case Is < 19
        KindOfShift = "Middagdienst"
    Case Else
        KindOfShift = "Avonddienst"
    End Select
End Function


Nu geeft de functie een tekst terug, maar niets weerhoudt je ervan om in zo'n blok de correctie direct aan te brengen.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1