Excel: formules MATCH () sans correspondance de caractère générique

2

J'utilise actuellement MATCH()dans Excel 2016 des colonnes de formules telles que:

= MATCH( [@[ITEM_CODE]], IM_PURCH_VENDOR_SUBLIST[[#All],[ITEM-CODE]], 0 )

Le résultat est essentiellement une clé étrangère. Il est utilisé dans d'autres colonnes avec INDEX()ou OFFSET()expressions pour associer la ligne en cours à la ligne correspondante dans l'autre table.

Certaines valeurs de recherche contiennent des signes de ponctuation, y compris les caractères génériques spéciaux *, ?et ~. Cela provoque une correspondance involontaire. Un exemple réel est le code d'article *XA1, qui correspond involontairement au code d'article 1SC0021REXA1dans l'autre table.

Ma solution actuelle pour l'exemple ci-dessus est la suivante:

= MATCH(
SUBSTITUTE( SUBSTITUTE( SUBSTITUTE( [@[ITEM_CODE]], "~", "~~" ), "*", "~*" ), "?", "~?" ),
IM_PURCH_VENDOR_SUBLIST[[#All],[ITEM-CODE]],
0
)

Qu'est-ce que je n'aime pas? Il est facile d'oublier lors de l' écriture des INDEX(MATCH())expressions, facile de se tromper (questions d'ordre), et tout simplement maladroit et difficile à lire. Toutefois, je n'ai pas trouvé d' MATCH()alternative ne comportant pas de caractère générique , ni même un moyen de simplifier l'expression de substitution, sans créer davantage de complexité ailleurs, telle que l'écriture d'une fonction personnalisée dans VBA.

MetaEd
la source

Réponses:

2

Vous pouvez utiliser l'agrégat:

=AGGREGATE(15,6,(ROW(IM_PURCH_VENDOR_SUBLIST[[#All],[ITEM-CODE]])-MIN(ROW(IM_PURCH_VENDOR_SUBLIST[[#All],[ITEM-CODE]]))+1)/(IM_PURCH_VENDOR_SUBLIST[[#All],[ITEM-CODE]]=[@[ITEM_CODE]]),1)

entrez la description de l'image ici

Ou vous pouvez utiliser cette version de tableau de MATCH:

=MATCH(TRUE,[ITEM_CODE]=IM_PURCH_VENDOR_SUBLIST[[#All],[ITEM-CODE]],0)

En tant que formule matricielle, il faut la confirmer avec Ctrl-Maj-Entrée lorsque vous quittez le mode Édition.

entrez la description de l'image ici

C’est la même chose que la seconde mais n’exige pas la nécessité du CST:

=MATCH(TRUE,INDEX([ITEM_CODE]=IM_PURCH_VENDOR_SUBLIST[[#All],[ITEM-CODE]],),0)
Scott Craner
la source
Dans la troisième expression, [ITEM_CODE]=IM_PURCH_VENDOR_SUBLIST[[#All],[ITEM-CODE]]me ressemble à une formule matricielle. Mais cela ne nécessite pas de CST?
MetaEd
Ni le premier ni le troisième n'exigent le CST, même s'il s'agit de formules de type tableau. Ce sont des formules matricielles natives. Il y en a quelques uns; SOMMAIRE, IRR, ... et quelques autres.
Scott Craner
Savez-vous où, dans la documentation Microsoft, je peux trouver les fonctions qui créent ce type de contexte de formule matricielle?
MetaEd
Non je ne suis pas désolé. Je les ai appris organiquement.
Scott Craner