En titt på kapslade IF-uttalanden och alternativ som är lättare att göra och förstå senare.
av David Goodmanson
I min senaste artikel tittade jag på ett enkelt Excel IF-uttalande plus deras användbara kusiner CountIf och SumIF. Jag berörde också det kapslade IF-uttalandet, där det finns många IF-funktioner i en cell.
Den här gången tittar vi på det kapslade IF-värdet mer detaljerat och speciellt alternativ som är lättare att skapa och förstå senare.
Därefter tittar vi på några alternativa sätt att använda IF-satsen i någon VBA-kod (Visual Basic for Applications), samt påståendet Select Case.
Betygsnumret i kolumn B förvandlas till en textbeskrivning i kolumn C. I Excel finns det alla möjliga sätt att göra I ett enkelt exempel som detta räcker en kapslad IF men det finns andra alternativ som a är lättare att läsa av andra människor.
Ingen planerar att skapa en lång grupp av kapslade IF. Det kryper vanligtvis över alla över tiden. En enkel kapslad IF med 2 eller 3 alternativ kan växa med fler och fler IF till den punkt där det är oläsligt och benäget för kodningsfel. Här är en ’enkel’ kapslad IF med 40 nivåer:
=IF(A2="A",TRUE,IF(A2="B",TRUE,IF(A2="C",TRUE,IF(A2="D",TRUE,
IF(A2="E",TRUE,IF(A2="F",TRUE,IF(A2="G",TRUE,IF(A2="H",TRUE,
IF(A2="I",TRUE,IF(A2="J",TRUE,IF(A2="K",TRUE,IF(A2="L",TRUE,
IF(A2="M",TRUE,IF(A2="N",TRUE,IF(A2="O",TRUE,IF(A2="P",TRUE,
IF(A2="Q",TRUE,IF(A2="R",TRUE,IF(A2="S",TRUE,IF(A2="T",TRUE,
IF(A2="U",TRUE,IF(A2="V",TRUE,IF(A2="W",TRUE,IF(A2="X",TRUE,
IF(A2="Y",TRUE,IF(A2="Z",TRUE,IF(A2="AA",TRUE,IF(A2="AB",TRUE,
IF(A2="AC",TRUE,IF(A2="AD",TRUE,IF(A2="AE",TRUE,IF(A2="AF",TRUE,
IF(A2="AG",TRUE,IF(A2="AH",TRUE,IF(A2="AI",TRUE,
IF(A2="AJ",TRUE,IF(A2="AK",TRUE,IF(A2="AL",TRUE,IF(A2="AM",TRUE,
IF(A2="AN",TRUE,FALSE))))))))))))))))))))))))))))))))))))))))
I Excel 2007 kan du ha 64 kapslade IF: er i en formel, men lycka till att felsöka en sådan rad! Kapslade IF: er är lättare att kontrollera i de senaste versionerna av Excel som har formelfärgkodning. Trots dessa hjälpare undviks starkt kapslade IF: er.
Om du tror att dina kapslade alternativ kan utökas senare, överväg ett av alternativen från början.
Kapslad IF
Först för de kapslade IF-funktionerna visas formeln för cell C3 nedan.
=IF(B3=5, "Boom", IF(B3=4, "Recovery", IF(B3=3, "Turning Point",
IF(B3=2, "Recession", IF(B3=1, "Depression")))))
Den kapslade IF fungerar från vänster till höger för att utvärdera det logiska testet, t.ex. B3 = 5, om detta betyg är sant infogar IF texten ”Boom”. Om B3 inte är lika med 5 så tittar IF på nästa logiska test (B3 = 4) och utvärderar varje steg i tur och ordning.
- IF fortsätter att utvärdera varje test tills det logiska testet är uppfyllt och avslutar sedan funktionen.
- Likhetstecknet till vänster om det första IF krävs bara en gång för den första IF, därefter , för varje kapslingsnivå lägger vi helt enkelt in texten IF. (Detta gäller för alla kapslade kalkylfunktioner).
- Antalet öppna parenteser ”(” måste matchas med antalet stängande parenteser ”)”. I formelexemplet ovan finns det 5 öppna parenteser, matchade med 5 slutande parenteser i slutet. Nya versioner av Excel har bättre färg- och felkontrollfunktioner för att hålla parenteser och citat raka, men ändå kan kapslade IFs en olägenhet att träna.
Sökningstabell
Ett sätt att komma runt komplexet hos den kapslade IF är att använda VLOOKUP länkad till en referenstabell annars var i kalkylbladet.
Vår tabell ser ut så här:
Funktionen i kolumn C i den ursprungliga tabellen står nu:
=VLOOKUP(B3,$G$2:$H$6,2,FALSE)
Vanligtvis lägger du uppslagstabellen i en annan flik i samma kalkylblad, men data kan hämtas var som helst.
VBA – IF-uttalandet
Ett alternativ är att skapa en anpassad VBA-funktion och sätta hela IF-logiken i VBA-kod.
Detta har fördelen att att vara mycket lättare att läsa och förstå.
Nackdelen är behovet av kodsäkerhet och oro för att VBA-koden är legitim och inte ett virus. Om dina användare inte är vana vid att få kalkylblad med bifogad kod kanske du vill undvika VBA-alternativ.
Här är ett kodavsnitt, det är samma logik som den kapslade IF i början av den här artikeln, men som du kan se, är mycket lättare att läsa:
" Using a VBA if statement structure
" ==================================
If Rating = 5 Then
Prediction = "Boom"
ElseIf Rating = 4 Then
Prediction = "Recovery"
ElseIf Rating = 3 Then
Prediction = "Turning Point"
ElseIf Rating = 2 Then
Prediction = "Recession"
ElseIf Rating = 1 Then
Prediction = "Depression"
End If
VBA: Select Case
Slutligen är Select Case-uttalandet en ännu lättare struktur att läsa.
"Using a Select Case structure
"=============================
Select Case Rating
Case 5
Prediction = "Boom"
Case 4
Prediction = "Recovery"
Case 3
Prediction = "Turning Point"
Case 2
Prediction = "Recession"
Case 1
Prediction = "Depression"
End Select
Select Case-uttalandet är en annan VBA-struktur som ger ett sätt att utvärdera en rad alternativ med ett minimum av repetitiv nyckling krävs . Det är också enklare och lättare att läsa och bör användas när det finns fler än tre alternativ för variabeln av intresse.
VBA: och bortom …
Slutligen för att ge dig en idé av den större kraften i Select Case här är en utökad version av Select Case:
Select Case Rating
Case 4.5 To 10
Prediction = "Boom"
Case 3.5 To 4.49
Prediction = "Recovery"
Case 2.5 To 3.49
Prediction = "Turning Point"
Case 1.5 To 2.49
Prediction = "Recession"
Case 0.5 To 1.4
Prediction = "Depression"
Case 0 To 0.49
Prediction = "Money under the Mattress"
Case Else
Prediction = "No prediction - there"s no economy left!"
End Select
Den här versionen testar för intervall av värden (t.ex. en klassificering från mer än eller lika med 3,5 men mindre än eller lika med 4,5) och möjliggör någon som erbjuder ett bråkvärde som 2.5.
Dessutom finns ”Else” -kontrollen längst ner i strukturen. I grund och botten täcker den ev allt annat som vi inte täckte över i våra föregående Elseifs. Om inget motsvarar betyget, ger den andra delen av strukturen en alternativ kontroll.
Det är det för IF-funktionsserien. Se till att dina kommentarer, frågor och förslag kommer in. Vi ses nästa gång.
Se även
- Excels SUM är mycket mer
- Gör ett komplext Excel cell enkel att använda
- Mer kapslade IF-alternativ
- VÄLJ-alternativet i Excel
- Excels IF-funktion