Riscrivere una formula di più IF nidificati troppo profonda


17

Ho scritto una formula semplice per verificare il valore di una cella. Sfortunatamente, la formula è troppo lunga per la mia versione di Excel 2007. L'errore è:

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

Inglese: la formula specificata non può essere inserita perché utilizza più livelli di annidamento di quelli consentiti nel formato di file corrente

Qualche idea su come abbreviare la formula?

"WENN" significa "IF" in tedesco.

   =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
La tua domanda sarebbe molto più leggibile se avessi strutturato la formula (c'è una modifica in sospeso riguardo a questo) - e, IMHO più importante, se descrivi a parole che vuoi ottenere. Forse abbiamo un problema con xy qui.
mpy

1
l'ultima riga mi ricorda uno scherzo
kmdreko

Risposte:


65

Penso che la formula sia equivalente a:

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

Ora che Kevin ha riformattato la formula, posso vedere chiaramente che la formula è corretta in tutti i casi.

Grazie al commento dell'interrogatore, posso affermare che la formula tedesca equivalente è:

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

Funziona alla grande !!! grazie - ho usato de.excel-translator.de/translator per tradurre la formula. In tedesco sembra=WENN(ODER(N7>=100000000;N7<500000);0;100-GANZZAHL(N7/1000000))
evavienna

Utilizzare VBA e creare una funzione definita dall'utente.
user1750995

Un po 'triste che questo salti la domanda generale e risolva solo per questo esempio particolare.
pipe

La formula sembra corretta, ma la vera risposta è che questo dovrebbe essere fatto all'interno di una tabella di ricerca come dice Tevlyn. Cercare di farlo con un'istruzione If è una cattiva pratica.
WhatEvil

5
@pipe, @WhatEvil - L'interrogante voleva ridurre la dimensione della sua IFaffermazione e, a causa della struttura dei suoi dati, ho dato la (ovvia a un matematico) risposta ovvia e sono completamente in disaccordo sul fatto che sia in qualche modo errata o cattiva pratica . Ovviamente una tabella di ricerca sarebbe necessaria per una funzione meno lineare, ma è eccessiva per questi dati e difficilmente può essere considerata ottimale: un calcolo diretto è sempre meglio di una ricerca quando è possibile evitare quest'ultimo.
AFH,

21

Inserisci tutti i valori di soglia in un intervallo in un foglio di lavoro e utilizza una formula di ricerca con una corrispondenza approssimativa.

Ordina i tuoi dati in ordine crescente in base al valore della colonna di ricerca. La colonna di ricerca deve essere la prima colonna della tabella di ricerca se si desidera utilizzare VLookup. Se sei felice di usare una combinazione Index / Match, la colonna di ricerca può trovarsi ovunque nella tabella.

Lo screenshot seguente ha una tabella di ricerca di esempio nelle celle da A1 a B6. La tabella è ordinata in ordine crescente in base ai valori nella colonna A. Questo è importante . Se la tabella non è ordinata in ordine crescente, la seguente formula non funzionerà.

Il valore nella cella E2 non corrisponde esattamente a nessuno dei valori nella colonna A. La formula di Vlookup troverà il valore più piccolo successivo (ovvero 50) e restituirà il risultato dalla colonna 2 della tabella di ricerca per questa corrispondenza approssimativa. Nota che per una corrispondenza approssimativa il quarto parametro di VLookup deve essere "TRUE" o 1.

Ecco la formula:

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

E lo screenshot:

inserisci qui la descrizione dell'immagine

Il nome tedesco di Vlookup è SVerweis (penso) e devi sostituire le virgole con punti e virgola in tedesco Excel. Non so cosa sia "VERO" in Excel tedesco, ma puoi usare un 1 per VERO e uno 0 per FALSO.

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

Hoffentlich klappt's !!


Ich hoffe auch! Lasciami leggere tutto questo - mi sembra molto lavoro. grazie - ti faccio sapere se sono in grado di farlo funzionare :)
evavienna

Compilare la tabella dei numeri non richiede molto lavoro se i numeri sono distribuiti uniformemente. Immettere i primi due numeri, selezionarli e trascinare la maniglia di riempimento.
teylyn,

TRUEè WAHRed FALSEè FALSCH.
IQV,

E perché un downvote?
teylyn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.