Compartir a través de


Fórmula frente a Fórmula2

Range.Formula y Range.Formula2 son dos formas diferentes de representar la lógica de la fórmula. Se pueden pensar en dos dialectos del lenguaje de fórmulas de Excel.

Excel siempre ha admitido dos tipos de evaluación de fórmulas: Evaluación implícita de intersección ("IIE") y Evaluación de matriz ("AE"). Antes de la introducción de matrices dinámicas, IIE era el valor predeterminado para las fórmulas de celda, mientras que AE se usaba en cualquier otra parte (formato condicional, validación de datos, fórmulas de matriz de CSE, etc.).

La diferencia principal entre las dos formas de evaluación era cómo se comportaban cuando se pasaba un intervalo de varias celdas (por ejemplo, A1:A10) a una función que esperaba un único valor:

  • IIE elegiría la celda en la misma fila o columna que la fórmula. Esta operación se conoce como "intersección implícita".
  • AE llamaría a la función con cada celda del rango de varias celdas y devolvería una matriz de resultados. Esta operación se conoce como "elevación".

Cuando se usa Range.Formula para establecer la fórmula de una celda, se usa IIE para la evaluación.

Con la introducción de Matrices dyanamic ("DA"), Excel ahora admite la devolución de varios valores a la cuadrícula y AE es ahora el valor predeterminado. Las fórmulas de AE se pueden establecer o leer mediante Range.Formula2, que reemplaza a Range.Formula. Sin embargo, para facilitar la compatibilidad inversa, Range.Formula sigue siendo compatible y seguirá estableciendo o devolviendo fórmulas IIE. El conjunto de fórmulas con Range.Formula desencadenará una intersección implícita y nunca se podrá derramar. La lectura de fórmulas con Range.Formula seguirá siendo silenciosa en el lugar donde se produzca la intersección implícita.

Range.Formula informa eficazmente de lo que se presentaría en la barra de fórmulas en Excel anterior a DA, mientras que Range.Formula2 notifica la fórmula notificada por la barra de fórmulas en DA Excel.

Excel se traduce automáticamente entre estas dos variaciones de fórmula, por lo que se puede leer y establecer. Para facilitar la traducción de Range.Formula (mediante IIE) a Range.Formula2 (AE), Excel indicará dónde podría producirse la intersección implícita mediante el nuevo operador de intersección implícita @. Del mismo modo, para facilitar la traducción de Range.Formula2 (mediante AE) a Range.Formula (mediante IIE), Excel quitará los operadores @ que se realizarían de forma silenciosa. A menudo no hay ninguna diferencia entre los dos.

Traducción de Range.Formula a Range.Formula2

En este ejemplo se muestra el resultado de establecer Range.Formula y, a continuación, recuperar Range.Formula2

Dim cell As Range
Dim str As String

Set cell = Worksheets("Sheet1").Cells(2, 1)
ArrayOfFormulas = Array("=SQRT(A1)", "=SQRT(A1:A4)")

For i = LBound(ArrayOfFormulas) To UBound(ArrayOfFormulas)
 cell.Formula = ArrayOfFormulas(i)
 str = "Wrote Range.Formula:" & vbCr & cell.Formula & _
    vbCr & vbCr & _
    "Read Range.Formula2:" & vbCr & cell.Formula2
 MsgBox (str)
Next i
Escribir Range.Formula Leer Range.Formula2 Notas
=SQRT(A1) =SQRT(A1) Idéntico porque no se pudo producir ninguna intersección implícita
=SQRT(A1:A4) =SQRT(@A1:A4) SQRT espera un valor único, pero se le asigna un intervalo de varias celdas. Esto desencadenará la intersección implícita en IIE, por lo que la traducción a AE indica dónde podría producirse la intersección implícita mediante el operador @

Traducción de Range.Formula2 a Range.Formula

El conjunto de fórmulas mediante Range.Formula2 Excel usa AE. Al guardar archivos, DA Excel examina las fórmulas del libro para determinar si calcularían lo mismo en AE e IIE. Si lo hacen, para mejorar la incompatibilidad inversa, Excel puede guardarlo como un IIE para reducir el número de fórmulas de matriz que ven las versiones anteriores a la da de Excel. Puede probar si la fórmula se guardará en un archivo como una fórmula de matriz mediante Range.SavedAsArray()

Dim cell As Range
Dim str As String

Set cell = Worksheets("Sheet1").Cells(2, 1)
ArrayOfFormulas = Array("=SQRT(A1)", "=SQRT(@A1:A4)", "=SQRT(A1:A4)", "=SQRT(A1:A4)+SQRT(@A1:A4)")

For i = LBound(ArrayOfFormulas) To UBound(ArrayOfFormulas)
 cell.Formula2 = ArrayOfFormulas(i)
 str = "Wrote Range.Formula2:" & vbCr & cell.Formula2 & _
    vbCr & vbCr & _
    "Read Range.Formula:" & vbCr & cell.Formula & _
    vbCr & vbCr & _
    "Read Range.IsSavedAsArray:" & vbCr & cell.SavedAsArray
 MsgBox (str)
Next i
Intervalo de escritura.Fórmula2 Leer Range.Formula Lectura de Range.SavedAsArray Notas
=SQRT(A1) =SQRT(A1) FALSE SQRT espera un único valor, A1 es un valor único. No hay varianza entre IIE y AE. Guardar como IIE y quitar cualquier @'s
=SQRT(@A1:A4) =SQRT(A1:A4) FALSE SQRT espera un valor único, @A1:A4 es un valor único. No hay varianza entre IIE y AE. Guardar como IIE y quitar cualquier @'s
=SQRT(A1:A4) =SQRT(A1:A4) TRUE SQRT espera un valor único, A1:A4 es un intervalo multicelda. IIE y AE podrían variar por guardar como matriz
=SQRT(A1:A4)+ SQRT(@A1:A4) =SQRT(A1:A4)+ SQRT(@A1:A4) TRUE El primer SQRT espera un único valor, A1:A4 es un intervalo multicelda. IIE y AE podrían variar por guardar como matriz

Procedimiento recomendado

Si tiene como destino la versión de DA de Excel, debe usar Range.Formula2 en preferencia a Range.Formula.

Si tiene como destino la versión anterior y posterior a la da de Excel, debe seguir usando Range.Formula. Sin embargo, si desea un control estricto sobre la apariencia de la fórmula de la barra de fórmulas de los usuarios, debe detectar si . Se admite Formula2 y, si es así, use . En caso contrario, fórmula2 use . Fórmula

Notas

OfficeJS no incluye Range.Formula2. En su lugar, Range.Formula siempre informa de lo que está presente en la barra de fórmulas. Como lenguaje más reciente con la capacidad de que los complementos implementen rápidamente actualizaciones, se recomienda a los desarrolladores que actualicen sus complementos si encuentran problemas de compatibilidad entre AE y IIE.

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.