Réécriture d'une formule de plusieurs FI imbriquées trop profonde


17

J'ai écrit une formule simple pour vérifier la valeur d'une cellule. Malheureusement, la formule est trop longue pour ma version Excel 2007. L'erreur est:

Allemand: Die angegebene Formel kann nicht eingegeben werden, da sie mehr als 64 Verschachtelungsebenen verwendet.

Français: La formule spécifiée ne peut pas être entrée car elle utilise plus de niveaux d'imbrication que ceux autorisés dans le format de fichier actuel

Une idée de comment raccourcir la formule?

"WENN" signifie "IF" en allemand.

   =WENN(N7>=100000000;0;
    WENN(N7>=99000000;1;
    WENN(N7>=98000000;2;
    WENN(N7>=97000000;3;
    WENN(N7>=96000000;4;
    WENN(N7>=95000000;5;
    WENN(N7>=94000000;6;
    WENN(N7>=93000000;7;
    WENN(N7>=92000000;8;
    WENN(N7>=91000000;9;
    WENN(N7>=90000000;10;
    WENN(N7>=89000000;11;
    WENN(N7>=88000000;12;
    WENN(N7>=87000000;13;
    WENN(N7>=86000000;14;
    WENN(N7>=85000000;15;
    WENN(N7>=84000000;16;
    WENN(N7>=83000000;17;
    WENN(N7>=82000000;18;
    WENN(N7>=81000000;19;
    WENN(N7>=80000000;20;
    WENN(N7>=79000000;21;
    WENN(N7>=78000000;22;
    WENN(N7>=77000000;23;
    WENN(N7>=76000000;24;
    WENN(N7>=75000000;25;
    WENN(N7>=74000000;26;
    WENN(N7>=73000000;27;
    WENN(N7>=72000000;28;
    WENN(N7>=71000000;29;
    WENN(N7>=70000000;30;
    WENN(N7>=69000000;31;
    WENN(N7>=68000000;32;
    WENN(N7>=67000000;33;
    WENN(N7>=66000000;34;
    WENN(N7>=65000000;35;
    WENN(N7>=64000000;36;
    WENN(N7>=63000000;37;
    WENN(N7>=62000000;38;
    WENN(N7>=61000000;39;
    WENN(N7>=60000000;40;
    WENN(N7>=59000000;41;
    WENN(N7>=58000000;42;
    WENN(N7>=57000000;43;
    WENN(N7>=56000000;44;
    WENN(N7>=55000000;45;
    WENN(N7>=54000000;46;
    WENN(N7>=53000000;47;
    WENN(N7>=52000000;48;
    WENN(N7>=51000000;49;
    WENN(N7>=50000000;50;
    WENN(N7>=49000000;51;
    WENN(N7>=48000000;52;
    WENN(N7>=47000000;53;
    WENN(N7>=46000000;54;
    WENN(N7>=45000000;55;
    WENN(N7>=44000000;56;
    WENN(N7>=43000000;57;
    WENN(N7>=42000000;58;
    WENN(N7>=41000000;59;
    WENN(N7>=40000000;60;
    WENN(N7>=39000000;61;
    WENN(N7>=38000000;62;
    WENN(N7>=37000000;63;
    WENN(N7>=36000000;64;
    WENN(N7>=35000000;65;
    WENN(N7>=34000000;66;
    WENN(N7>=33000000;67;
    WENN(N7>=32000000;68;
    WENN(N7>=31000000;69;
    WENN(N7>=30000000;70;
    WENN(N7>=29000000;71;
    WENN(N7>=28000000;72;
    WENN(N7>=27000000;73;
    WENN(N7>=26000000;74;
    WENN(N7>=25000000;75;
    WENN(N7>=24000000;76;
    WENN(N7>=23000000;77;
    WENN(N7>=22000000;78;
    WENN(N7>=21000000;79;
    WENN(N7>=20000000;80;
    WENN(N7>=19000000;81;
    WENN(N7>=18000000;82;
    WENN(N7>=17000000;83;
    WENN(N7>=16000000;84;
    WENN(N7>=15000000;85;
    WENN(N7>=14000000;86;
    WENN(N7>=13000000;87;
    WENN(N7>=12000000;88;
    WENN(N7>=11000000;89;
    WENN(N7>=10000000;90;
    WENN(N7>=9000000;91;
    WENN(N7>=8000000;92;
    WENN(N7>=7000000;93;
    WENN(N7>=6000000;94;
    WENN(N7>=5000000;95;
    WENN(N7>=4000000;96;
    WENN(N7>=3000000;97;
    WENN(N7>=2000000;98;
    WENN(N7>=1000000;99;
    WENN(N7>=500000;100;0)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

13
Votre question serait beaucoup plus lisible si vous aviez structuré la formule (il y a une modification en attente à ce sujet) - et, à mon humble avis plus important, si vous décrivez avec des mots ce que vous allez accomplir. Nous avons peut-être un problème xy ici.
mpy

1
la dernière ligne me rappelle une blague
kmdreko

Réponses:


65

Je pense que la formule équivaut à:

=IF(OR(N7>=100000000,N7<500000),0,100-INT(N7/1000000))

Maintenant que Kevin a reformaté la formule, je peux voir très clairement que la formule est correcte dans tous les cas.

Grâce au commentaire de l'interrogateur, je peux affirmer que la formule allemande équivalente est:

=WENN(ODER(N7>=100000000;N7<500000);0;100-GANZZAHL(N7/1000000))

Fonctionne génial !!! thx - j'ai utilisé de.excel-translator.de/translator pour traduire la formule. En allemand, cela ressemble à=WENN(ODER(N7>=100000000;N7<500000);0;100-GANZZAHL(N7/1000000))
evavienna

Utilisez VBA et créez une fonction définie par l'utilisateur.
user1750995

Un peu triste que cela saute la question générale et ne résout que pour cet exemple particulier.
pipe

La formule semble correcte mais la vraie réponse est que cela devrait être fait dans une table de recherche comme le dit tevlyn. Essayer de le faire avec une instruction If est une mauvaise pratique.
WhatEvil

5
@pipe, @WhatEvil - Le questionneur a voulu réduire la taille de sa IFdéclaration, et en raison de la structure de ses données, j'ai donné la réponse évidente (à un mathématicien) et je ne suis pas du tout d'accord que ce soit en tout sens une mauvaise ou mauvaise pratique . Évidemment, une table de consultation serait nécessaire pour une fonction moins linéaire, mais elle est excessive pour ces données et peut difficilement être considérée comme optimale: un calcul direct est toujours meilleur qu'une recherche lorsque cette dernière peut être évitée.
AFH

21

Mettez toutes vos valeurs de seuil dans une plage sur une feuille de calcul et utilisez une formule de recherche avec une correspondance approximative.

Triez vos données dans l'ordre croissant en fonction de la valeur de la colonne de recherche. La colonne de recherche doit être la première colonne de la table de recherche si vous souhaitez utiliser VLookup. Si vous êtes heureux d'utiliser un combo Index / Match, la colonne de recherche peut être n'importe où dans le tableau.

La capture d'écran ci-dessous présente un exemple de table de recherche dans les cellules A1 à B6. Le tableau est trié par ordre croissant selon les valeurs de la colonne A. Ceci est important . Si le tableau n'est pas trié croissant, la formule suivante ne fonctionnera pas.

La valeur dans la cellule E2 n'est une correspondance exacte pour aucune des valeurs de la colonne A. La formule Vlookup trouvera la prochaine valeur la plus petite (par exemple 50) et renverra le résultat de la colonne 2 de la table de recherche pour cette correspondance approximative. Notez que pour une correspondance approximative, le quatrième paramètre de VLookup doit être "TRUE" ou 1.

Voici la formule:

=VLOOKUP(E2,$A$1:$B$6,2,TRUE)

Et la capture d'écran:

entrez la description de l'image ici

Le nom allemand de Vlookup est SVerweis (je pense), et vous devez remplacer les virgules par des points-virgules dans Excel allemand. Je ne sais pas ce que "TRUE" est dans Excel allemand, mais vous pouvez utiliser un 1 pour VRAI et un 0 pour FAUX.

=SVerweis(E2;$A$1:$B$6;2;1)

Hoffentlich klappt's !!


Ich hoffe auch! Permettez-moi de lire ceci - cela me semble beaucoup de travail. thx - je vous fais savoir si je suis capable de le faire fonctionner :)
evavienna

Remplir un tableau de nombres n'est pas beaucoup de travail si les nombres sont espacés uniformément. Entrez les deux premiers nombres, sélectionnez-les et faites glisser la poignée de remplissage.
teylyn du

TRUEest WAHRet FALSEest FALSCH.
IQV

Et pourquoi un downvote?
teylyn le
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.