Delen via


Aangepaste functie berekent mogelijk geen verwachte waarde in Excel

Symptomen

Wanneer u het werkblad berekent, lijken sommige cellen mogelijk de verkeerde waarde te hebben berekend.

Oorzaak

Dit probleem treedt op als de volgende punten van toepassing zijn:

  • Een cel op het werkblad bevat een aangepaste functie.

  • De aangepaste functie bevat een of meer argumenten die verwijzen naar een celbereik op het werkblad.

  • Het resultaat van de aangepaste functie is afhankelijk van meer cellen dan er rechtstreeks naar wordt verwezen.

Dit gedrag is standaard van Microsoft Excel. Wanneer excel de cel met de aangepaste functie berekent, worden alle celbereiken die als argumenten worden doorgegeven aan uw aangepaste functie opnieuw berekend. Als het resultaat van uw functie afhankelijk is van cellen waarnaar niet expliciet wordt verwezen door de functie, worden deze cellen mogelijk niet opnieuw berekend.

Tijdelijke oplossing

Gebruik een van de volgende methoden om dit probleem te omzeilen.

Methode 1: Wijzig de functie zodat alle relevante celbereiken worden doorgegeven

Wijzig de functie om alle cellen die nodig zijn om het resultaat van de functie te berekenen als argumenten te accepteren.

Methode 2: Uw aangepaste functie vluchtig maken

Microsoft verstrekt programmeervoorbeelden alleen ter illustratie, zonder expliciete of impliciete garantie. daaronder mede begrepen, maar niet beperkt tot impliciete garanties met betrekking tot de verkoopbaarheid en/of geschiktheid voor een bepaald doel. In dit artikel wordt ervan uitgegaan dat u bekend bent met de programmeertaal VBScript, alsmede met de hulpprogramma's waarmee procedures worden gemaakt en waarmee fouten in procedures worden opgespoord. Microsoft-ondersteuningstechnici kunnen helpen bij het uitleggen van de functionaliteit van een bepaalde procedure, maar ze zullen deze voorbeelden niet wijzigen om extra functionaliteit te bieden of procedures te maken die voldoen aan uw specifieke vereisten. Als u uw aangepaste functie vluchtig maakt, treedt dit probleem niet op. Als u uw aangepaste functie vluchtig wilt maken, voegt u de volgende regel code toe aan de functie.

Application.Volatile

Opmerking

Als u uw aangepaste functie vluchtig maakt, wordt deze telkens opnieuw berekend wanneer u een waarde wijzigt of een geopende werkmap opnieuw berekent. Dit kan van invloed zijn op de prestaties van uw werkbladmodel.

Methode 3: Excel dwingen om alle geopende werkmappen opnieuw te berekenen

Druk op Ctrl+Alt+F9 om de waarden in alle geopende werkmappen opnieuw te berekenen. Druk in Microsoft Office Excel 2007 op Ctrl+Alt+Shift+F9 om de waarden in alle geopende werkmappen opnieuw te berekenen.

Meer informatie

Voorbeeld van het probleem

Voer de volgende stappen uit om dit probleem te illustreren:

  1. Sluit alle geopende werkmappen en sla deze op en open vervolgens een nieuwe werkmap.

  2. Start de Visual Basic-Editor (druk op Alt+F11).

  3. Klik in het menu Invoegen op Module.

  4. Typ de volgende code in het modulewerkblad:

    ' This function counts the number of blank cells by starting from the cell 
    ' referred to by the rngStartCell argument and moving up the column.
    
    Function FindTextUp(rngStartCell As Range) As Single
        Dim iIndex As Integer
    
    For iIndex = 0 To 100
            If rngStartCell.Value <> "" Then
                FindTextUp = iIndex
                Exit Function
            Else
                Set rngStartCell = rngStartCell.Offset(-1, 0)
            End If
        Next iIndex
    End Function
    
  5. Druk op Alt+F11 om terug te keren naar Excel.

  6. Typ Test in cel A2 en druk op Enter.

  7. Typ de volgende formule in cel A10 en druk op Enter:

    =FindTextUp(A9)
    

    De formule retourneert de waarde 7.

  8. Typ Een andere test in cel A5 en druk op Enter.

De formule retourneert nog steeds een waarde van 7, wanneer een waarde van 4 wordt verwacht. In dit voorbeeld verwijst de functie FindTextUp expliciet naar cel A9. De functie kan echter afhankelijk zijn van cellen A1:A8, afhankelijk van de gegevens die in het werkblad zijn ingevoerd.

Als u methode 1 implementeert in de sectie Tijdelijke oplossing van dit artikel, berekent de functie het verwachte resultaat. De volgende regel code laat zien hoe u de functie in dit voorbeeld kunt wijzigen, zodat het verwachte resultaat wordt berekend.

Function FindTextUp(rngStartCell As Range, rngOtherCells As Range) As Single

Als u nu de functie-aanroep in stap 7 vervangt door de volgende functie-aanroep, retourneert de functie altijd het verwachte resultaat.

=FindTextUp(A9,A1:A8)