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