Det kan hända att den anpassade funktionen inte beräknar det förväntade värdet i Excel

Anteckning

Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.

Symptom

När du beräknar kalkylbladet kan det hända att vissa celler verkar ha beräknat fel värde.

Orsak

Problemet uppstår under följande förutsättningar:

  • En cell i kalkylbladet innehåller en anpassad funktion.

  • Den anpassade funktionen innehåller ett eller flera argument som refererar till ett cellområde i kalkylbladet.

  • Resultatet av den anpassade funktionen beror på fler celler än de direkt refererar till.

Det här beteendet är enligt Microsoft Excel. När Excel den cell som innehåller den anpassade funktionen beräknas alla cellområden som överförs som argument till den anpassade funktionen. Om resultatet av funktionen är beroende av celler som inte uttryckligen refereras av funktionen, kan det hända att de cellerna inte beräknas om.

Lösning

Använd någon av följande metoder för att komma runt det här problemet.

Metod 1: Ändra funktionen så att alla relevanta cellområden överförs

Ändra funktionen för att acceptera alla celler som argument för att beräkna funktionens resultat.

Metod 2: Gör den anpassade funktionen beständig

Microsoft tillhandahåller programmeringsexempel enbart i förklarande syfte och gör inga utfästelser, varken uttryckligen eller underförstått. Detta omfattar men begränsas inte till underförstådd garanti för säljbarhet eller lämplighet för ett visst syfte. I denna artikel förutsätts att du känner till det programmeringsspråk som demonstreras och de verktyg som används för att skapa och felsöka procedurer. Microsoft-supporttekniker kan förklara funktionaliteten i en viss procedur, men de ändrar inte de här exemplen för att ge ytterligare funktioner eller skapa procedurer som uppfyller dina specifika krav. Om din anpassade funktion görs ej beständig kommer det här problemet inte att uppstå. För att den anpassade funktionen ska bli beständig lägger du till följande rad med kod i funktionen.

Application.Volatile

Anteckning

Om den anpassade funktionen görs beständig beräknas den om varje gång du gör en ändring i ett värde eller beräknar om en öppen arbetsbok. Det kan påverka prestandan för kalkylbladsmodellen.

Metod 3: Tvinga Excel att beräkna om alla öppna arbetsböcker

Tryck på CTRL+ALT+F9 om du vill beräkna om värdena i alla öppna arbetsböcker. I Microsoft Office Excel 2007 trycker du på CTRL+ALT+SKIFT+F9 för att beräkna om värdena i alla öppna arbetsböcker.

Mer information

Exempel på problemet

Gör så här för att illustrera problemet:

  1. Stäng och spara alla öppna arbetsböcker och öppna sedan en ny arbetsbok.

  2. Starta Visual Basic (tryck på ALT+F11).

  3. Klicka på ModulInfoga-menyn.

  4. Skriv följande exempelkod i modulbladet:

    ' 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. Tryck på ALT+F11 för att återgå till Excel.

  6. Skriv Test, i cell A2, och tryck sedan på RETUR.

  7. Skriv in följande formel i cell A10 och tryck sedan på RETUR:

    =FindTextUp(A9)
    

    Formeln returnerar värdet 7.

  8. Skriv Ett annat test i cell A5 och tryck sedan på RETUR.

Formeln returnerar fortfarande värdet 7, när värdet 4 förväntas. I det här exemplet refererar funktionen SökTextUpp explicit till cell A9. Funktionen kan dock vara beroende av cellerna A1:A8, beroende på vilka data som anges i kalkylbladet.

Om du implementerar metod 1 i avsnittet "Lösning" i den här artikeln beräknar funktionen det förväntade resultatet. Följande rad med kod visar hur du ändrar funktionen i det här exemplet så att det förväntade resultatet beräknas.

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

Om du ersätter funktionsanropet i steg 7 med följande funktionsanrop returnerar funktionen alltid det förväntade resultatet.

=FindTextUp(A9,A1:A8)