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.

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)

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.