Notifications
Clear all

Como inserir fórmulas matriciais via Macro

3 Posts
2 Usuários
0 Reactions
1,673 Visualizações
(@victor-marassi)
Posts: 81
Estimable Member
Topic starter
 

Pessoal,

Estou com uma dúvida referente ao outro tópico discutido:
viewtopic.php?f=11&t=4990

Eu preciso escrever uma linha de código que contenha a fórmula que devolve a data mais recente. A fórmula está ok, foi resolvida na discussão do link acima, porém, preciso inserir essa fórmula na célula através de uma macro.

Como insiro uma fórmula matricial via macro?

Abraços!

 
Postado : 24/07/2012 12:03 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Em Vba, deve-se utilizar ...formulaArray.., porem deve-se utilizar as referencias no estilo L1C1

Veja o que diz o help do excel

Propriedade FormulaArray
Consulte também Aplica-se a Exemplo EspecificaesRetorna ou define a fórmula de matriz de um intervalo. Retorna (ou pode ser definida como) uma única fórmula ou uma matriz do Visual Basic. Se o intervalo especificado não contiver uma fórmula de matriz, essa propriedade retornará Null. Variant de leitura/gravação.

Comentários
Se você usar essa propriedade para inserir uma fórmula de matriz, a fórmula precisará usar o estilo de referência L1C1, e não o estilo de referência A1 (veja o segundo exemplo).

Exemplo
Este exemplo insere o número 3 como uma constante de matriz nas células A1:C5 de Sheet1.

Worksheets("Sheet1").Range("A1:C5").FormulaArray = "=3"

Este exemplo insere a fórmula de matriz =SOMA(L1C1:L3C3) nas células E1:E3 de Sheet1.

Worksheets("Sheet1").Range("E1:E3").FormulaArray = _
"=Sum(R1C1:R3C3)"

 
Postado : 24/07/2012 12:50 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde,

Se a fórmula for a seguinte, ela não é matricial:

=SE(ÉERROS(CORRESP(LIN(A1);Plan1!$C$2:$C$1000;0));"";ÍNDICE(Plan1!$B$2:$B$1000;CORRESP(LIN(A1);Plan1!$C$2:$C$1000;0)))

Para inserí-la via VBA, sugiro o seguinte código:

Sub InserirFormula()
    [F1].FormulaLocal = "=SE(ÉERROS(CORRESP(LIN(A1);Plan1!$C$2:$C$1000;0));"""";ÍNDICE(Plan1!$B$2:$B$1000;CORRESP(LIN(A1);Plan1!$C$2:$C$1000;0)))"
End Sub

Se fosse matricial, minha sugestão seria:

Sub InserirFormulaMatricial()
    [F1].FormulaLocal = "=SE(ÉERROS(CORRESP(LIN(A1);Plan1!$C$2:$C$1000;0));"""";ÍNDICE(Plan1!$B$2:$B$1000;CORRESP(LIN(A1);Plan1!$C$2:$C$1000;0)))"
    [F1].FormulaArray = [F1].Formula
End Sub

Abraço

 
Postado : 24/07/2012 1:23 pm