web-dev-qa-db-fra.com

Comment effectuer plusieurs opérations pour lesquelles l'instruction IF est vraie?

La fonction ci-dessous correspond à ce que j’utilise pour gérer les informations de contact (adresses électroniques/numéros de téléphone). Si l'entrée est un identifiant de courrier électronique (avec du texte), il le conservera tel quel. Lorsqu'un numéro de téléphone est entré, il effectue diverses opérations.

=IF(ISNUMBER(E2), IF(LEFT(E2, 2) = "44", REPLACE(E2,1,2,"0"), CONCAT("0",E2)), E2)

J'essaie d'ajouter le code/la fonction ci-dessous au numéro de téléphone avant que Google Sheets applique la formule ci-dessus.

=REGEXREPLACE(TEXT(E2,"##############"),"\D","")

Fondamentalement, si la cellule E2 est un nombre, je souhaite commencer par REGEXREPLACE ce nombre, puis effectuer les opérations supplémentaires. Je ne suis pas sûr de savoir comment joindre les deux formules.

Vous pouvez consulter le résultat attendu et tester vos formules ici: exemple de tableur

1
Niaz Ahamed

L'instruction IF est composée de 3 parties. comprendre comment cela fonctionne:

if (something is something,do this,if not - do this)

donc dans l'expression de la formule:

=IF(E2="something","its ok, do nothing","E2 isn't ""something"" do something")

les choses deviennent confuses si vous voulez faire des choses plus avancées, cependant, la règle en 3 parties reste toujours



solution 1:

solution 2:

  • cellule B3:
=IF(AND(ISNUMBER(A3),LEFT(A3, 2) =  "44"), REPLACE(A3,1,2,"0"),
 IF(AND(ISNUMBER(A3),LEFT(A3, 2) <> "44"), CONCAT("0",A3),
 IF(AND(ISTEXT(A3),  LEFT(A3, 3) =  "+44"),REPLACE(REGEXREPLACE(TEXT(A3,"##############"),"\D",""),1,2,"0"),
 IF(AND(ISTEXT(A3),  LEFT(A3, 2) =  "07"), A3,
 IF(AND(ISTEXT(A3),  LEFT(A3, 1) =  "7"),  CONCAT("0",REGEXREPLACE(TEXT(A3,"##############"),"\D","")),
 IF(ISTEXT(A3),A3))))))


pourquoi cela n'a pas fonctionné pour vous:
Les cellules A7, A9 et A11 sont dans votre feuille au format TEXT et non pas NUMBER alors que votre formule réclame =IF(ISNUMBER(...etc. de sorte que la valeur renvoyée est égale à la valeur initiale/initiale .

1
user0

Ainsi, si E2 est un nombre, vous souhaitez exécuter REGEXREPLACE(TEXT(E2,"##############"),"\D","") sur ce nombre, puis effectuez IF(LEFT(value, 2) = "44", REPLACE(value,1,2,"0"), CONCAT("0",value)) sur le résultat de REGEXREPLACE.

Dans ce cas, la formule que vous recherchez serait beaucoup plus ordonnée avec une cellule auxiliaire pour conserver le résultat intermédiaire de REGEXREPLACE, mais vous pouvez le faire sans. Vous devrez utiliser la formule REGEXREPLACE à la place d'une référence simple E2 pour chacune des trois fois que vous vous référez . ) E2 dans le IF intérieur, comme suit:

=IF(ISNUMBER(E2), IF(LEFT(REGEXREPLACE(TEXT(E2,"##############"),"\D",""), 2) = "44", REPLACE(REGEXREPLACE(TEXT(E2,"##############"),"\D",""),1,2,"0"), CONCAT("0",REGEXREPLACE(TEXT(E2,"##############"),"\D",""))), E2)

formule mise à jour

Toutes mes excuses, je pensais que la condition initiale ISNUMBER fonctionnait déjà pour vous. Maintenant que j'ai vu vos exemples de la façon dont cela devrait fonctionner, j'ai mis à jour la formule:

=IF(value(REGEXREPLACE(TEXT(D3,"##############"),"\D",""))<>0, IF(LEFT(REGEXREPLACE(TEXT(D3,"##############"),"\D",""), 2) = "44", REPLACE(REGEXREPLACE(TEXT(D3,"##############"),"\D",""),1,2,"0"), CONCAT("0",REGEXREPLACE(TEXT(D3,"##############"),"\D",""))), D3)

Cela fonctionne sur tous les exemples de votre feuille de test.

1
exterrestris