web-dev-qa-db-fra.com

Google Sheets Pattern Matching / RegEx pour COUNTIF

La documentation pour la correspondance des modèles pour Google Sheets n'a pas été utile. Je lis et cherche depuis un moment maintenant et je ne trouve pas ce problème particulier. Peut-être que j'ai du mal à trouver les bons termes à rechercher, mais voici le problème:

J'ai plusieurs numéros (numéros de pièce) qui suivent ce format: ##-####

Les catégories peuvent être définies par les numéros de pièce, c'est-à-dire 50-03## serait une catégorie de produits et les 2 chiffres restants sont spécifiques à un modèle.

J'ai essayé de faire ça:

=countif(E9:E13,"50-03[123][012]*")

(E9:E13 contient le numéro de pièce au format texte. Si je le formate d'une autre manière, les valeurs s'affichent car Google Sheets pense que j'écris une date ou que j'essaie de faire de l'arithmétique.)

Cela renvoie 0 à chaque fois, sauf si je devais passer à:

=countif(E9:E13,"50-03*")

Il semble donc que les caractères génériques fonctionnent, mais la correspondance des motifs ne fonctionne pas?

16
Martin

Comme vous l'avez identifié et que Wiktor a mentionné, COUNTIF ne prend en charge que les caractères génériques.

Il existe de nombreuses façons de faire ce que vous voulez, pour ne citer que 2

=ArrayFormula(SUM(--REGEXMATCH(E9:E13, "50-03[123][012]*")))

=COUNTA(FILTER(E9:E13, REGEXMATCH(E9:E13, "50-03[123][012]*")))
14
Robin Gertenbach

C'est un très gros marteau pour un problème comme le vôtre, mais vous pouvez utiliser QUERY pour faire quelque chose comme ceci:

=QUERY(E9:E13, "select count(E) where E matches '50-03[123][012]' label count(E) ''")

Le bit label sert à empêcher QUERY d'ajouter un en-tête automatique à la colonne count().

La bonne chose à propos de cette approche est que vous pouvez également insérer d'autres colonnes. Disons que dans la colonne H, vous avez un certain nombre de commandes pour chaque pièce. Ensuite, vous pouvez prendre deux cellules et afficher à la fois le nombre de pièces et la somme des commandes:

=QUERY(E9:H13, "select count(E), sum(H) where E matches '50-03[123][012]' label count(E) '', sum(H) ''")

Je trouve régulièrement cette question sur $searchEngine Et je ne remarque pas que j'ai lié ne autre question avec un problème similaire et d'autres réponses pertinentes.