Fórmula vs Fórmula2
Range.Formula e Range.Formula2 são duas maneiras diferentes de representar a lógica na fórmula. Eles podem ser pensados em dois dialetos da linguagem de fórmula do Excel.
O Excel sempre deu suporte a dois tipos de avaliação de fórmula: Avaliação implicitamente de Interseção ("IIE") e Avaliação de Matriz ("AE"). Antes da introdução de Matrizes Dinâmicas, o IIE era o padrão para fórmulas de célula, enquanto o AE era usado em todos os outros lugares (Formatação Condicional, Validação de Dados, fórmulas da Matriz CSE etc.).
A principal diferença entre as duas formas de Avaliação foi como elas se comportaram quando um intervalo de várias células (por exemplo, A1:A10) foi passado para uma função que esperava um único valor:
- O IIE escolheria a célula na mesma linha ou coluna que a fórmula. Essa operação é chamada de "interseção implícita".
- O AE chamaria a função com cada célula no intervalo de várias células e retornaria uma matriz de resultados. Essa operação é chamada de "lifting".
Quando Range.Formula é usado para definir a fórmula de uma célula, o IIE é usado para avaliação.
Com a introdução de Matrizes Dyanamic ("DA"), o Excel agora dá suporte ao retorno de vários valores à grade e o AE agora é o padrão. As fórmulas AE podem ser definidas/lidas usando Range.Formula2 que substitui Range.Formula. No entanto, para facilitar o backcompatiblity, o Range.Formula ainda tem suporte e continuará a definir/retornar fórmulas IIE. O conjunto de fórmulas usando Range.Formula disparará interseção implícita e nunca poderá ser derramado. A leitura de fórmula usando Range.Formula continuará em silêncio sobre onde ocorre a Interseção Implícita.
Range.Formula relata efetivamente o que seria apresentado na barra de fórmulas no Excel Pré-DA, enquanto Range.Formula2 relata a fórmula relatada pela barra de fórmulas no DA Excel.
O Excel se traduz automaticamente entre essas duas variações de fórmula, para que elas possam ser lidas e definidas. Para facilitar a tradução de Range.Formula (usando IIE) para Range.Formula2 (AE), o Excel indicará onde a interseção implícita pode ocorrer usando o novo operador de interseção implícita @. Da mesma forma, para facilitar a tradução de Range.Formula2 (usando a AE) para Range.Formula (usando iIE) o Excel removerá os operadores @ que seriam executados silenciosamente. Muitas vezes não há diferença entre os dois.
Tradução de Range.Formula para Range.Formula2
Este exemplo mostra o resultado de definir Range.Formula e, em seguida, 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
Write Range.Formula | Ler Range.Formula2 | Observações |
---|---|---|
=SQRT(A1) | =SQRT(A1) | Idêntico porque nenhuma interseção implícita poderia ocorrer |
=SQRT(A1:A4) | =SQRT(@A1:A4) | O SQRT espera um único valor, mas recebe um intervalo de várias células. Isso disparará a interseção implícita no IIE, para que a tradução para a AE chame onde a interseção implícita pode ocorrer usando o operador @ |
Tradução de Range.Formula2 para Range.Formula
Conjunto de fórmulas usando Range.Formula2 Excel use AE. Na salvação de arquivos, o DA Excel examina as fórmulas na pasta de trabalho para determinar se elas calculariam o mesmo no AE e no IIE. Se o fizerem, para melhorar a backcompatibility, o Excel poderá salvá-lo como um IIE para reduzir o número de fórmulas array vistas pelas versões pré-DA do Excel. Você pode testar se a fórmula será salva no arquivo como uma fórmula de matriz usando 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
Write Range.Formula2 | Ler Range.Formula | Ler Range.SavedAsArray | Observações |
---|---|---|---|
=SQRT(A1) | =SQRT(A1) | FALSE | O SQRT espera um único valor, O A1 é um único valor. Não há nenhuma variação entre IIE e AE. Salvar como IIE e remover qualquer @'s |
=SQRT(@A1:A4) | =SQRT(A1:A4) | FALSE | O SQRT espera um único valor, @A1:A4 é um único valor. Não há nenhuma variação entre IIE e AE. Salvar como IIE e remover qualquer @'s |
=SQRT(A1:A4) | =SQRT(A1:A4) | TRUE | O SQRT espera um único valor, A1:A4 é um intervalo de várias células. IIE e AE podem variar para salvar como matriz |
=SQRT(A1:A4)+ SQRT(@A1:A4) | =SQRT(A1:A4)+ SQRT(@A1:A4) | TRUE | O primeiro SQRT espera um único valor, A1:A4 é um intervalo de várias células. IIE e AE podem variar para salvar como matriz |
Prática Recomendada
Se estiver direcionando a versão da da do Excel, você deverá usar Range.Formula2 em preferência para Range.Formula.
Se estiver direcionando a versão pré e pós-da do Excel, você deverá continuar a usar Range.Formula. Se, no entanto, você quiser um controle rígido sobre a aparência da fórmula da barra de fórmulas dos usuários, você deverá detectar se . Há suporte para a Fórmula 2 e, se for o caso, use . Caso contrário, a Fórmula 2 usará . Fórmula
Observações
O OfficeJS não inclui Range.Formula2. Em vez disso, Range.Formula sempre relata o que está presente na barra de fórmulas. Como uma linguagem mais recente com a capacidade de os suplementos implantarem atualizações rapidamente, os desenvolvedores serão incentivados a atualizar seus suplementos se encontrarem problemas de compatibilidade entre o AE e o IIE.
Suporte e comentários
Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.