• 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.

AANTAL.ALS bij overschrijding waarde tekst laten weergeven

  • Onderwerp starter Onderwerp starter bjw
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

bjw

Gebruiker
Lid geworden
8 jul 2015
Berichten
8
Hallo,

Ik heb een lijst met waterstanden in de ene lijst en als deze onder een variabele drempelwaarde komen, wil ik dat dit wordt opgeteld. Bij een aantal van 360 wil ik dat er dan een tekst komt te staan afhankelijk van het moment waarop dit gebeurt. Ik ben al even bezig geweest met AANTAL.ALS, INDEX en VERGELIJKEN en heb dit via een omweg weten te bereiken, alleen is mijn originele bestand enorm groot en vergt deze manier veel te veel rekenkracht. Weten jullie een slimmere manier om dit op te lossen?

Groet,
BramBekijk bijlage Voorbeeld.xlsx
 
Het heeft even geduurd om door de code heen te gaan en bij het originele bestand (waar bijna 8000 rijen moeten worden doorlopen) liep de code vast, maar het is me gelukt om het werkend te krijgen (nog niet heel snel, maar hij doet t). Hartstikke bedankt voor het meekijken en meedenken! Voor de volledigheid hier de uiteindelijke code bijgevoegd van het originele bestand, voor als andere mensen tegen dit probleem aanlopen.

Code:
Sub waterstanden()
Dim i As Long, L2 As Long, a, cl As Range, lCalcState As Long, Starttime As Double, SecondsElapsed As Double
Application.ScreenUpdating = False
Starttime = Timer
lCalcState = Application.Calculation
Application.Calculation = xlCalculationManual
a = Worksheets("Droogstand").Range("A1").CurrentRegion.Value
For Each cl In Range("P3:P7829")
L2 = 0
   For i = 3 To UBound(a)
      L2 = L2 - (a(i, 2) < cl.Offset(0, -1).Value)
        If cl.Offset(0, -1).Value = "" Then
          cl = ""
        ElseIf L2 >= 360 Then
          cl = a(i, 1)
          Exit For
        Else
          cl = L2
        End If
   Next i
Next cl
Application.Calculation = lCalcState
SecondsElapsed = Round(Timer - Starttime, 2)
MsgBox "Deze code is uitgevoerd in" & SecondsElapsed & "seconden.", vbInformation
Application.ScreenUpdating = True
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan