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)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
evavienna
la source
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))
AFH
la source
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 !!

teylyn
la source
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