Ensemble ArrayFormula à de nombreuses cellules Excel à l'aide de VBA

J'ai une formule de tableau qui renvoie une seule valeur, et je veux donner tout un tas de cellules de cette même formule de tableau. Le problème est quand je attribuer le tableau de la formule de la gamme, il interprète la formule de telle manière que tous les autres le partage de la sortie d'un seul appel à la formule de tableau, plutôt que de chacun d'entre eux de la sortie d'une valeur distincte.

Pour vous montrer ce que je veux dire, je suis en utilisant le code suivant:

With MarginalData
    .Range(.Cells(2, 1), .Cells(13, .UsedRange.Columns.Count)).FormulaArray = pullFormula
End With

Ce que je veux, est un résultat qui ressemble à ceci:
Ensemble ArrayFormula à de nombreuses cellules Excel à l'aide de VBA

C'est à quoi il ressemble quand je rentre la formule matricielle séparément dans chaque cellule de la plage.

Mais ce que je reçois est ceci:
Ensemble ArrayFormula à de nombreuses cellules Excel à l'aide de VBA

La sortie de la formule de tableau dans la première cellule est répété dans toutes les colonnes - ils partagent tous la même sortie.

Comment puis-je en programmant attribuer la formule de tableau, comme si chaque cellule avait attribué séparément?


La formule est:

{=INDEX(BatchResults,MATCH(TTID&CHAR(1)&ROW()-1,BatchResultsTTIDS&CHAR(1)&BatchResultsLayers,0),MATCH(A$1,BatchTTIDData!$1:$1,0))}

Il faut le mettre dans une formule de tableau, car il effectue un match non pas sur une seule colonne, mais sur les deux concaténées colonnes. La concaténation des colonnes doivent être retournées dans un tableau, d'où la formule doit être saisi comme une formule de matrice.


La solution la plus simple jusqu'à présent, une variante de la accepté de répondre ci-dessous, est la suivante:

Const pullFormula = "=INDEX(BatchResults,MATCH(TTID&CHAR(1)&ROW()-1,BatchResultsTTIDS&CHAR(1)&BatchResultsLayers,0),MATCH(A$1,BatchTTIDData!$1:$1,0))"
With wrksht
    With .Range(.Cells(2, 1), .Cells(13, .UsedRange.Columns.Count))
        .Formula = pullFormula
        .FormulaArray = .FormulaR1C1
    End With
End With
Vous devez être en mesure de faire les "pullFormula" dépendant de la cellule, il en, mais nous avons besoin de la chaîne pour que de vous montrer comment le faire (si c'est possible).
Comme vous pouvez le voir ci-dessus, pullFormula dépend déjà de la cellule. Il prend en compte la ligne actuelle, et l'en-tête de colonne (A$1), qui est différent pour chaque colonne.
Bonne question. Et comme par cet article vous avez la meilleure approche

OriginalL'auteur Alain | 2011-05-18