(Condition) dans SUMPRODUCT WorksheetFunction

En réalité, j'ai besoin d'exécuter COUNTIFS WorksheetFunction à l'aide de Variant Arrays, mais je suppose que cela n'est pas possible dans VBA. L'alternative serait d'écrire ma propre fonction COUNTIFS dans VBA, mais je me demandais s'il serait possible d'écrire la fonction SUMPRODUCT suivante dans VBA …

=SUMPRODUCT(--(Table1[Col1]="Something"),--(Table1[Col2]="Something")) 

Si nous pouvons le faire, alors je n'aurais pas besoin d'écrire ma fonction supplémentaire. Je ne suis pas certain de ce qui serait plus rapide.

Si vous searchz simplement une fonction COUNTIFS opérationnelle en utilisant des references de tables structurées, l' object ListObject et ses propriétés sont les paths à parcourir.

 Sub dermal() Dim hdr1 As Long, hdr2 As Long, cntif As Long Dim str As Ssortingng, app As Application Set app = Application With Worksheets("Sheet1").ListObjects("Table1") hdr1 = app.Match("Col1", .HeaderRowRange.Rows(1), 0) hdr2 = app.Match("Col2", .HeaderRowRange.Rows(1), 0) str = "something" cntif = app.CountIfs( _ .ListColumns(hdr1).DataBodyRange, str, _ .ListColumns(hdr2).DataBodyRange, str) Debug.Print cntif End With Set app = Nothing End Sub 

Le nouveau COUNTIFS est beaucoup plus rapide qu'une fonction SUMPRODUCT comparable; prenant généralement 30% du time pour compléter les opérations équivalentes, même si elles sont utilisées avec des fréquences élevées de la gamme de colonnes, alors que SUMPRODUCT a été réduit aux plus faibles étendues des données.

Si vous avez absolument besoin de presser chaque milli-deuxième et nécessiter des arrays de variantes avec un traitement en memory, je reorderais une structure de class en utilisant les methods de filtrage dans Filtrage de 2D Arrays dans Excel VBA par assylias .