• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Melding bij drie keer een nul

Status
Niet open voor verdere reacties.

don42

Gebruiker
Lid geworden
25 apr 2014
Berichten
800
Hoi allemaal


Weet niet of het kan maar
Is het mogelijk dat je een melding krijgt (MsgBox) als er in een rij drie keer achterelkaar een 0 wordt ingevoerd
dus enkel als het drie (of meer) keer achter elkaar is, dan de melding met iets van attentie 3 x niet gespaard (of vaker)

Doe er een klein voorbeeldje bij misschien dat dit duidelijker maakt wat de bedoeling is

Bekijk bijlage driekeernul.xlsx

Don
 
Gebruik in Kolom L eens deze functie die je in een module plaatst:

Code:
Function DrieXNul(Par1 As Range) As String
    For i = 1 To Par1.Count
        If Par1(i).Value = "0" Then
            cnt = cnt + 1
            If cnt = 3 And svi = i - 1 Then
                ngp = ngp + 1
                cnt = 0
            End If
            svi = i
        End If
    Next i

    If ngp >= 1 Then
        DrieXNul = ngp * 3 + cnt & " x niet gespaard"
    End If
End Function

Aanroep beginnen in L2 met: =DrieXNul(B2:K2)
Vervolgens doortrekken naar L27
Bekijk bijlage driekeernul-1-2.xlsm

Om meegeteld te worden moet een cel wel 0 bevatten en niet leeg zijn.
Als je dat wel wilt moet de functie erop worden aangepast.
 
Laatst bewerkt:
Zo dat is al heel mooi
de bedoeling is eigenlijk dat de controle niet in kolom L is maar variabele kolommen
als ik in de laatste oranje cel in mijn voorbeeld een een 0 invul (zijn dat dus 3 nullen)
dan na de enter de mededeling in een MSG box
maar weet niet of dat teveel gevraagd is
 
Laatst bewerkt:
Dat kan wel maar dan moet de functie omgebouwd worden naar een Sub en de melding in een MessageBox worden gedaan. De Sub moet dan worden geactiveerd door het Worksheet_Change event waarbij gecontroleerd wordt of de Kolom B t/m L is en de Rij kleiner dan 28 waarna de controle op de huidige rij wordt gedaan.

Niet echt een probleem maar ik heb daar nu helaas geen tijd voor.
 
Laatst bewerkt:
Ha ha ik denk dat je het goed omschrijft maar zal niet weten waar te beginnen
misschien dat iemand anders er een uitdaging in ziet
in elk geval heel erg bedankt voor je bijdrage
 
Of:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column >= 4 And Target.Value = 0 Then
For i = 2 To Target.Column
 If Cells(Target.Row, i) = 0 And WorksheetFunction.Sum(Range(Cells(Target.Row, i).Address, Target.Address)) = 0 Then
   y = y + 1
 End If
Next i
 If y >= 3 Then MsgBox "Al " & y & " x niet gespaard."
   End If
End Sub
 
Top dat je dit doet

En het wordt steeds beter, een 0 maakt mij niks uit gaat mij enkel en alleen om het aantal nullen achter elkaar
in mijn spaarkas waar ik dit voor gebruik heeft 3 x achter elkaar niet sparen gevolgen
2 x niet 1 keer wel en weer 2 x niet zou niks uitmaken als er 3 keer achter elkaar niet gespaard is hoef ik die eerder 2 nullen niet te weten enkel de series van 3 of meer achter elkaar
indien meerdere series voorkomen in een rij zou wel handig zijn.
 
Laatst bewerkt:
Top - de code uit #7 is gewoon wat ik wil
ben helemaal happy met de oplossingen ga er mee aan de slag
beide heel erg bedankt voor jullie geweldige hulp
:thumb:
 
Laatst bewerkt:
Dat je maar geholpen bent, daar gaat het om :)
 
Nog 1 vraagje hoe krijg ik het voor elkaar om in de MsgBox ook waarde van kolom A te krijgen
daar staat in mijn orginele file de naam van een deelnemer. dan zou het echt helemaal af zijn

Don
 
In de MessageBox van de code van HSV?
 
Code:
 If y >= 3 Then MsgBox Cells(Target.Row, 1).Value & " heeft al " & y & "x niet gespaard."
 
Dit is wat ik graag wou
ga de vraag sluiten
yes wat fijn
 
Laatst bewerkt:
HSV

gisteren van jou deze code gekregen:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column >= 4 And Target.Value = 0 Then 'als de geselecteerde cel kolom D of hoger is en deze de waarde nul heeft
For i = 2 To Target.Column 'nu mag je mij even helpen
 If Cells(Target.Row, i) = 0 And WorksheetFunction.Sum(Range(Cells(Target.Row, i).Address, Target.Address)) = 0 Then 'nu mag je mij even helpen
   y = y + 1 'nu mag je mij even helpen
 End If
Next i 'nu mag je mij even helpen
 If y >= 3 Then MsgBox Cells(Target.Row, 1).Value & " heeft al " & y & "x niet gespaard."
   End If
End Sub

Ik ben zo enthousiast over deze oplossing, zou jij mij i(voor 1 keer) in stappen uit willen leggen
hoe de code werkt
je zou mij er een groot plezier mee doen (met F1) kom ik er niet uit helaas
BVD

Don
 
Laatst bewerkt:
Eigenlijk is het simpel als je de code vertaalt naar het Nederlands.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column >= 4 And Target.Value = 0 Then 'als actieve kolom groter of gelijk is aan vier, en ingegeven cel is 0 dan
For i = 2 To Target.Column  'loopje van kolom 2 tot actieve kolom
 If Cells(Target.Row, i) = 0 And WorksheetFunction.Sum(Range(Cells(Target.Row, i).Address, Target.Address)) = 0 Then
   'als cel(rij van actieve cel en kolom van het loopje = 0 en de som van het loopje tot de actieve cel = 0 dan
   y = y + 1  'verhoog je y telkens met 1
 End If
Next i  'repeteren tot de waarde van actieve kolom
 If y >= 3 Then MsgBox Cells(Target.Row, 1).Value & " heeft al " & y & "x niet gespaard."
 'als "y" groter of gelijk aan 3, dan je messagebox weergeven
   End If
End Sub
 
bedankt voor de uitleg.
ga je nu iederekeer vanaf de kolom2 te werk
of 2 kolommen vanaf de active cel, ik zie niet hoe je optelt
 
Laatst bewerkt:
Het kan op 1 regel.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If WorksheetFunction.Sum(Target.Offset(0, -2).Resize(1, 3)) = 0 Then MsgBox "3 keer een 0 bij " & Range("A" & Target.Row).Value
End Sub

Met vriendelijke groet,


Roncancio
 
Mooi zeg op 1 regel een mooie oplossing
nadeel van deze is een MsgBox laat zien vanaf 3 en blijft 3, en niet optelt bij meer nullen
zou er van kunnen maken minimaal 3 x niet gespaard
heb vaak ook het woord "vakantie" staan ipv een getal dit mag niet gezien worden als een nul

Voorbeeld:
10 - Vakantie - 5 Geeft resultaat 3 x niet gespaard. (dat is niet de bedoeling)
als er ergens in de reeks een woord staat komt de melding 3 x niet gespaard.

Oplossing #16 doet dat wel (begint vanaf 3 x 0 en telt dan door indien er meer nullen achter elkaar komen te staan)
Deze doet precies wat ik graag wil maar wil zo graag begrijpen wat er gebeurd in de code

Maar ondanks de uitleg zie ik niet hoe die telling tot stand komt
(dat loopje !?) en kolom van het loopje = 0
heb deze regel :

Code:
For i = 2 To Target.Column  'loopje van kolom 2 tot actieve kolom
 If Cells(Target.Row, i) = 0 And WorksheetFunction.Sum(Range(Cells(Target.Row, i).Address, Target.Address)) = 0 Then
   'als cel(rij van actieve cel en kolom van het loopje = 0 en de som van het loopje tot de actieve cel = 0 dan
   y = y + 1  'verhoog je y telkens met 1
 End If
Next i  'repeteren tot de waarde van actieve kolom


wel 20 keer gelezen en het kwartje valt niet :confused:
Don
 
Laatst bewerkt:
De code van Roncancio zou je direct een foutmelding geven als je in kolom B iets invult.
Code:
target.offset(,-2)
Waarbij de -2 de boosdoener is.


Verander deze regel in mijn code,...

Code:
 If Cells(Target.Row, i) = 0 And WorksheetFunction.Sum(Range(Cells(Target.Row, i).Address, Target.Address)) = 0 Then
in:
Code:
 If IsNumeric(Cells(Target.Row, i)) And WorksheetFunction.Sum(Range(Cells(Target.Row, i).Address, Target.Address)) = 0 Then
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan