Toon posts:

[VB/Excel] Aantal waarden tellen a.d.h.v meerdere condities

Pagina: 1
Acties:

Verwijderd

Topicstarter
Tweakerts,

Ik kom ergens niet uit met Visual Basic en Excel. Het probleem is als volgt. Ik heb een tabel die er als volgt uitziet:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Tijd    Uur Run
100 4   1
200 7   1
315 96  2
100 24  1
200 31  2
315 33  1
315 20  2
100 48  1
100 55  2
315 56  1
100 79  2
100 103 2


Vervolgens wil in Visual Basic bepalen of een rij aan een aantal condities voldoet, namelijk:
- de waarde van run moet een bepaalde waarde hebben, bijvoorbeeld 1
- de waarde van uur moet binnen bepaalde grenzen vallen, namelijk van [0-7, 24-31, 48-55, 72-79, 96-103]

Indien er aan deze condities voldaan is moet de waarde van die rij in een andere cel weggeschreven worden. Ik heb het volgende script gebakken, de uren worden juist gecontroleerd alleen de waarde van run niet?

Het gaat om het volgende script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Sub wachttijd()
Row = 2

For Number = 1 To 14 'stel de waarde in tot waar de loop moet lopen
'run 1 & uren 0-7, 24-31, 48-55, 72-79, 96-103 & wachttijd
If Cells(Row, "C") = 1 _
And Cells(Row, "B") > 0 And Cells(Row, "B") < 8 _
Or Cells(Row, "B") > 23 And Cells(Row, "B") < 32 _
Or Cells(Row, "B") > 47 And Cells(Row, "B") < 56 _
Or Cells(Row, "B") > 71 And Cells(Row, "B") < 80 _
Or Cells(Row, "B") > 95 And Cells(Row, "B") < 104 _
Then Cells(2, "H") = Cells(2, "H") + Cells(Row, "A") 
Row = Row + 1
Next Number
End Sub

Ik heb me inmiddels al redelijk suf gezocht op zowel google als got, maar niet echt iets kunnen vinden wat hierop betrekking heeft.

Alvast bedankt

[ Voor 9% gewijzigd door Verwijderd op 09-06-2005 19:50 ]


  • Dielie
  • Registratie: Februari 2001
  • Laatst online: 22-08 20:35

Dielie

*BURP!*

Spuit elf.. Sorry, niet goed gelezen.

[ Voor 77% gewijzigd door Dielie op 09-06-2005 20:52 ]


Verwijderd

Verwijderd schreef op donderdag 09 juni 2005 @ 19:42:

code:
1
2
3
[...]
Then Cells(2, "H") = Cells(2, "H") + Cells(Row, "A") 
[...]
Need I say more?

Verder is je if statement behoorlijk brak...

Je doet een And en daarna behoorlijk wat Or's

Volgens mij bedoel je meer zoiets:

code:
1
If voorwaarde1 And (voorwaarde2 Or voorwaarde3) Then

[ Voor 38% gewijzigd door Verwijderd op 09-06-2005 21:28 ]


Verwijderd

Topicstarter
Ik zal eens kijken of ik dat if statement netjes kan maken op de manier die jij aangeeft. Ik snap alleen niet wat je bedoelt met Need I say more? Wat dat betreft kun je inderdaad beter wat meer vertellen..

Verwijderd

Topicstarter
Het is nu zo en werkt goed:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Sub wachttijd()
Row = 2

For Number = 1 To 14 'stel de waarde in tot waar de loop moet lopen
'run 1 & uren 0-7, 24-31, 48-55, 72-79, 96-103 & wachttijd
If Cells(Row, "C") = 1 _
And (Cells(Row, "B") > 0 And Cells(Row, "B") < 8 _
Or Cells(Row, "B") > 23 And Cells(Row, "B") < 32 _
Or Cells(Row, "B") > 47 And Cells(Row, "B") < 56 _
Or Cells(Row, "B") > 71 And Cells(Row, "B") < 80 _
Or Cells(Row, "B") > 95 And Cells(Row, "B") < 104) _
Then Cells(2, "H") = Cells(2, "H") + Cells(Row, "A")

Row = Row + 1
Next Number
End Sub


Is dit nu wel netjes? Bedankt voor de tip!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB/AI

Front verplichte underscores

offtopic:
Netjes is het IMHO pas als je ook even goed uitlijnt etc., ook zou ik zelf een hulpvariabele maken ipv. steeds Cells(Row, "B") uit te lezen. Maar goed, de reden dat ik reageer: ik verplaats het topic SA -> Officesuites en -software

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

Als je ook nog alle vergelijkingen van de waarde Cells(Row, "B") wilt inkrimpen (ik zal niet zeggen makkelijker maken :+ )

If Cells(Row, "C") = 1 And (INT(Cells(Row, "B")/8) / 3 = INT(INT(Cells(Row, "B")/8) / 3)) Then ...

Het voordeel hiervan is dat het ook werkt voor de getalreeksen 120-127, 144-151, etc. mocht je het ooit nog eens uit willen breiden. Nadeel is dat het niet meer recht toe recht aan te begrijpen is...

  • WillyF
  • Registratie: Augustus 2003
  • Laatst online: 10-04-2024
Zelf zou ik het als volgt hebben gedaan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Option Explicit

Const iRijEerste As Integer = 2
Const iRijLaatste As Integer = 13

Const iKolTijd As Integer = 1
Const iKolUur As Integer = 2
Const iKolRun As Integer = 3

Dim iRij As Integer

Dim celUur As Range
Dim celTijd As Range
Dim celRun As Range

Dim iUur As Integer
Dim iTijd As Integer
Dim iRun As Integer

Dim blRunIsEen As Boolean
Dim blUurIsGoed As Boolean

Dim iWO As Integer
Dim iWN As Integer
Dim celOptelWaarde As Range


Public Sub Wachttijd()
    
    Set celOptelWaarde = Blad1.Cells(2, 8)
    
    For iRij = iRijEerste To iRijLaatste
            
        MaakRanges iRij
    
        iUur = celUur
        iTijd = celTijd
        iRun = celRun
        
        blRunIsEen = IsRunEen(iRun)
        blUurIsGoed = IsUurGoed(iUur)
        
        If blRunIsEen And blUurIsGoed Then
            iWO = celOptelWaarde
            iWN = iWO + iTijd
            celOptelWaarde = iWN
        End If
    
    Next iRij

End Sub

Private Sub MaakRanges(RijNummer As Integer)
    Set celUur = Blad1.Cells(RijNummer, iKolUur)
    Set celTijd = Blad1.Cells(RijNummer, iKolTijd)
    Set celRun = Blad1.Cells(RijNummer, iKolRun)
End Sub

Private Function IsRunEen(DeRun As Integer) As Boolean
    If iRun = 1 Then
        IsRunEen = True
    Else
        IsRunEen = False
    End If
End Function

Private Function IsUurGoed(HetUur As Integer) As Boolean
    Dim tmpIsUurGoed As Boolean
    
    Select Case HetUur
        Case 0 To 8
            tmpIsUurGoed = True
        Case 23 To 32
            tmpIsUurGoed = True
        Case 47 To 56
            tmpIsUurGoed = True
        Case 71 To 80
            tmpIsUurGoed = True
        Case 95 To 104
            tmpIsUurGoed = True
        Case Else
            tmpIsUurGoed = False
    End Select
    
    IsUurGoed = tmpIsUurGoed
End Function


Misschien dat je bij de Select Case nog aan de grenswaardes moet sleutelen...

The trouble of being a troubleshooter is when trouble starts to shoot back

Pagina: 1