sumproduct Formula array dans VBA

ActiveSheet.Evaluate("=SUMPRODUCT((""" & Source1_Val & """ = " & Target1 & ")*(""" & Source2_Val & """ = " & target2 & ")*ROW(" & Target1 & "))") 

La même formule fonctionne lorsque je mets directement Excel, mais lorsque je l'ai terminé via VBA, je n'obtiens aucun résultat.

Formule Excel:

 =SUMPRODUCT((Source!Q2=Q1:Q33)*(Source!L2 = L1:L33)*ROW(L1:L33)) 

Vous searchz MSDN -Utilisation de gammes ?

 Range("AD:AD").Select Range("AE:AE").Select 

Les colonnes 1, etc., sont-ils tous les noms définis? Alors:

 .Evaluate("=SUMPRODUCT((Column1=Source1_Val)*(Column2=Source2_Val)*ROW())") 

La réponse est plutôt stupide. Supprimez le signe = du text.

Supposons que la cellule D7:D9 ainsi que E7:E9 contient des valeurs numériques, la fonction suivante fonctionne bien dans la window immédiate

 ?Evaluate("SUMPRODUCT(D7:D9, E7:E9)") 

EDIT: En supposant que tous les noms des variables ci-dessous sont ssortingng.

 dim myFormula as ssortingng myFormula = "SUMPRODUCT((" & Source1_Val & " = " & Target1 & ")" _ & " * (" & Source2_Val _ & " = " & target2 & ")*ROW(" & Target1 & "))" ActiveSheet.Evaluate(myFormula) 

Il n'est pas nécessaire d'inclure des citations doubles supplémentaires dans la formule.

EDIT2: en fonction du file joint, voici le code pour montrer qu'il fonctionne

 option explicit Sub TestFormulaSsortingngUsingEvaluate() Dim formula As Ssortingng Dim source1_Val As Ssortingng Dim source2_Val As Ssortingng Dim target1 As Ssortingng Dim target2 As Ssortingng '** Fill in the values for the following 4 variables source1_Val = "Source!Q2" target1 = "Target!Q$1:Q$10" source2_Val = "Source!L2" target2 = "Target!L$1:L$10" formula = "SUMPRODUCT((" & source1_Val & "= " & target1 & ") " _ & "*(" & source2_Val & "=" & target2 & ") " _ & "* ROW(" & target2 & "))" MsgBox Application.Evaluate(formula) End Sub