Compartir a través de


Es posible que la función personalizada no calcule el valor esperado en Excel

Síntomas

Al calcular la hoja de cálculo, es posible que algunas celdas parezcan haber calculado el valor incorrecto.

Causa

Este problema se produce cuando se cumplen las condiciones siguientes:

  • Una celda de la hoja de cálculo contiene una función personalizada.

  • La función personalizada contiene uno o varios argumentos que hacen referencia a un rango de celdas en la hoja de cálculo.

  • El resultado de la función personalizada depende de más celdas de las que hace referencia directamente.

Este comportamiento es por diseño de Microsoft Excel. Cuando Excel calcula la celda que contiene la función personalizada, recalcula todos los rangos de celdas que se pasan como argumentos a la función personalizada. Si el resultado de la función depende de celdas a las que la función no hace referencia explícitamente, es posible que esas celdas no se vuelvan a calcular.

Solución alternativa

Para solucionar este problema, use cualquiera de los métodos siguientes.

Método 1: Modificar la función para que se pasen todos los intervalos de celdas pertinentes

Modifique la función para que acepte como argumentos todas las celdas necesarias para calcular el resultado de la función.

Método 2: Hacer que la función personalizada sea volátil

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía, ya sea expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Se considera que está familiarizado con el lenguaje de programación que se muestra y con las herramientas para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden ayudar a explicar la funcionalidad de un procedimiento determinado, pero no modificarán estos ejemplos para proporcionar funcionalidad adicional ni construir procedimientos para satisfacer sus requisitos específicos. Si hace que la función personalizada sea volátil, este problema no se producirá. Para que la función personalizada sea volátil, agregue la siguiente línea de código a la función.

Application.Volatile

Nota:

Si hace que la función personalizada sea volátil, se volverá a calcular cada vez que realice un cambio en un valor o vuelva a calcular un libro abierto. Esto podría afectar al rendimiento del modelo de hoja de cálculo.

Método 3: Forzar a Excel para volver a calcular todos los libros abiertos

Presione CTRL+ALT+F9 para volver a calcular los valores de todos los libros abiertos. En Microsoft Office Excel 2007, presione CTRL+ALT+MAYÚS+F9 para volver a calcular los valores de todos los libros abiertos.

Más información

Ejemplo del problema

Para ilustrar este problema, siga estos pasos:

  1. Cierre y guarde los libros abiertos y, a continuación, abra un nuevo libro.

  2. Inicie la Editor de Visual Basic (presione ALT+F11).

  3. En el menú Insertar, haga clic en Módulo.

  4. Escriba el siguiente código en la hoja del módulo:

    ' 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. Presione ALT+F11 para volver a Excel.

  6. Escriba Test, en la celda A2 y, a continuación, presione ENTRAR.

  7. Escriba la fórmula siguiente en la celda A10 y presione ENTRAR:

    =FindTextUp(A9)
    

    La fórmula devuelve un valor de 7.

  8. Escriba Otra prueba en la celda A5 y, a continuación, presione ENTRAR.

La fórmula sigue devuelve un valor de 7, cuando se espera un valor de 4. En este ejemplo, la función FindTextUp hace referencia explícitamente a la celda A9. Sin embargo, la función puede depender de las celdas A1:A8, dependiendo de los datos especificados en la hoja de cálculo.

Si implementa el método 1 en la sección "Solución alternativa" de este artículo, la función calculará el resultado esperado. La siguiente línea de código muestra cómo modificar la función en este ejemplo para que se calcule el resultado esperado.

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

Ahora, si reemplaza la llamada de función en el paso 7 por la siguiente llamada de función, la función siempre devolverá el resultado esperado.

=FindTextUp(A9,A1:A8)