|
Materialet publicerat med tillstånd från Dennis Wallentin.
Om villkorsstyrd kalkylering
Med villkorsstyrd (händelsestyrd) kalkylering menas att man
överlåter till XL att utvärdera om ett eller flera villkor är SANT
eller FALSKT. Beroende på utfallet kan man låta respektive utfall
innebära skilda aktiviteter. Grunden för detta är den s k
OM-funktionen och är (för mig) den mest kraftfulla enskilda
funktionen XL erbjuder. I nedanstående tabell exemplifieras
OM-funktionen.

I det första exemplet utför XL ett logiskt test huruvida värdet
i cellen A2 är mindre eller lika med 50. Om påståendet är SANT så
utförs multiplikationen. Om det är FALSKT så lämnas cellen tom.
Det andra exemplet ger samma resultat som det första men påståendet
skiljer sig åt (det är spegelvänt).
I det tredje exemplet används ytterligare en logisk funktion,
ELLER-funktionen. Tolkningen av uttrycket är att om A4>10 ELLER
B4<5 så visa uttrycket "Sant", dvs antingen är båda
villkoren sanna eller så är ett utav dem för att visa uttrycket
"Sant".
I det fjärde exemplet används också OCH-funktionen. Villkoret här
är att båda påståenden måste vara sanna för att visa uttrycket
"Sant.
I det sista exemplet används en ytterligare annan logisk funktion,
ICKE-funktionen. Den kan vara svår att förstå. I exemplet erhålls
värdet "Falskt" om A6 > 10, dvs påståendet är
ICKE-sant!
Nästlade OM-funktioner
Att "nästla" är att låta ytterligare OM-satser vara
utfallet för SANT eller FALSKT i en OM-sats. I en och samma cell kan
man nästla upp till 7 st OM-funktioner (dock finns det möjlighet att
gå runt denna begränsning men det tas inte upp här).
Antag att det finns en cell vars värde ska multipliceras med ett
annat värde. Beroende på cellvärdet ska värdet multipliceras med
skilda procentsatser. Antalet procentsatser uppgår till 4 st, 10 %,
15 %, 20 % och 25%. Cellvärdet kan anta värdena 2, 3 ,4, och 5.
-
=OM(A2=2;A2*10%;OM(A2=3;A2*15%;OM(A2=
4;A2*20%;OM(A2=5;A2*25%;""))))
Om det första påståendet är falskt så sker nästa utvärdering
o s v. Om påståendet är sant så sker en multiplikation. Annorlunda
uttryckt så har vi här skapat ett beslutsträd.
Även andra funktioner kan användas tillsammans med nästlade
OM-funktioner:
-
=OM(VÄNSTER(A9;1)="A";"Avd
"&HÖGER(A9;1);OM
(VÄNSTER(A9;1)="B";"Aktivitet
"&HÖGER(A9;1)))
Beroende på om cellvärdet initialt börjar på "A"
eller "B" så klassificeras utfallet som "Avd" +
avdelningsnummer eller som "Aktivitet" + aktivitetsnummer.
En ytterligare demonstrator belyser hur OM-satsen kan kombineras med
VÄLJ-funktionen:
-
=B1*OM(B8="R";VÄLJ(B9;14;13;11);VÄLJ(B9;11;9;7))
Den mest komplexa formel jag har behövt ta fram är nedanstående
formel, vilken också inkluderar hantering av felmeddelanden:
-
=OM(ÄRFEL(OM(Utfall_SMHI=0;"";OM(Utförd_B_kvant>
Ny_B_kvant;75%*(Utförd_B_kvant-Ny_B_kvant)*A_pris__kr;
OM((Utförd_B_kvant-Ny_B_kvant)<0;25%*-(Utförd_B_kvant-Ny_B_kvant)
*A_pris__kr;25%*(Utförd_B_kvant-Ny_B_kvant)*A_pris__kr))));"";
OM(Utfall_SMHI=0;"";OM(Utförd_B_kvant>Ny_B_kvant;75%*
(Utförd_B_kvant-Ny_B_kvant)*A_pris__kr;OM((Utförd_B_kvant-
Ny_B_kvant)<0;25%*-(Utförd_B_kvant-Ny_B_kvant)*A_pris__kr;25%*
(Utförd_B_kvant-Ny_B_kvant) *A_pris__kr))))
Villkorsstyrt medelvärde
Här används en kombination av SUMMA.OM-funktionen och
ANTAL.OM-funktionen. I tabellen nedan visas ett exempel på hur dessa
funktioner används för att räkna fram ett villkorsstyrt
medelvärde.

Resultatet av SUMMA.OM-funktionen är för A-enheter 250. ANTAL.OM-
funktionen ger resultatet 2 och medelvärdet blir
följaktligen 125 (250 / 2).
Flera villkor!
Enligt direkt-hjälpen så är antalet villkor begränsade till ett
för såväl SUMMA.OM som ANTAL.OM. Men det finns en odokumenterad
syntax som gör att antalet villkor kan utökas till två stycken!.
Tabellen nedan visar exempel på detta.

I det första exemplet så utförs summering om värdena i listan
dels understiger 25 och dels överstiger 75, dvs två villkor.
Villkoren innesluts av matrisklammrar, vilka man manuellt måste ange
när formeln matas in.
I det andra exemplet så räknas antal förekomster om värdena i
listan dels understiger 25 och dels överstiger 75, dvs även här
finns två villkor som ska uppfyllas för att beräkning ska ske.
Summering i datumintervall
Här presenteras en teknik för summering inom ett önskat
datumintervall.
Tabellen nedan visar förutsättningarna:

Formeln för att erhålla summan för den önskade datumperioden ser
ut på följande sätt:
-
=ABS(SUMMA.OM(A2:A7;"<="&D2;B2:B7)-
SUMMA.OM(A2:A7;"<"&E2;B2:B7))
Att ABS-funktioner finns med förklaras av det faktum att summan av
den andra SUMMA.OM-formeln vanligtvis överstiger den första, dvs
negativa värden kan därmed uppstå vilket funktionen eliminerar.
Intervallvillkor
Här visas en formelteknisk enkel lösning på ett komplext
problem.
Antag att vi ska utvärdera ett cellvärde enligt följande:
| <100 |
Visa värdet 0 |
| >99 och <150 |
Visa värdet 1 |
| >149 och <200 |
Visa värdet 2 |
| >199 och <250 |
Visa värdet 3 |
Bilden nedan visar dels listan och de rätta utfallen:

I kolumnen för "Utfall 1" används följande
villkorssformel:
-
=OM(A2<100;0;HELTAL(A2/50)-1)
I kolumnen för "Utfall 2" används t o m en kortare formel:
Med denna struktur så går det att utöka villkoren nästan till
oändlighet.
Fler villkor än 7?
Ett av de problem vi ofta stöter på när vi arbetar med villkor
och i synnerhet vid nästlade villkor är att den inbyggda
begränsningen om 7 villkor lägger hinder för våra tilltänkta
lösningar.
De alternativa lösningar som finns till buds är att använda sig
av en letaupp- tabell eller använda oss av en relativ komplex lösning
baserad på namn.
Men det finns faktiskt ett ytterligare sätt att kringgå denna
begränsning och det visar detta tips!
Förutsättningarna för exemplet är att vi har följande villkor:
|
Villkor |
Värde om villkoret uppfylls |
|
A2=AA |
10 |
|
A2=BB |
20 |
|
A2=CC |
30 |
|
A2=DD |
40 |
|
A2=EE |
50 |
|
A2=FF |
60 |
|
A2=GG |
70 |
|
A2=HH |
80 |
|
A2=II |
90 |
|
A2=JJ |
100 |
Här har vi 10 villkor och bilden nedan visar exemplet i sin helhet

För att kunna utvärdera fler villkor än 7 används följande
långa formel:
-
=OM(A2="AA";10;"")&OM(A2="BB";20;"")&OM(A2="CC";30;"")&
OM(A2="DD";40;"")&OM(A2="EE";50;"")&OM(A2="FF";60;"")
&OM(A2="GG";70;"")&OM(A2="HH";80;"")&OM(A2="II";90;"")
&OM(A2="JJ";100;"")
Lösningen ligger i att bygga upp en OM-funktion och sedan koppla
på ytterligare OM-funktioner genom att sammanfoga (&) formlerna.
Dock måste vi vara medvetna om att det erhållna värdet är ett
textvärde, dvs det går inte att räkna med. Det i sin tur är enkelt
att lösa genom att multiplicera ovanstående formel med 1, dvs 1*(formel).
Slutsatsen är att vi kan:
- Utöka till nästan hur många villkor som helst
- Utveckla formel ytterligare genom t ex
=OM(OCH(A2="AA";B2=1);10;"")&
=OM(ELLER(A2="AA";A2="BB";10;"")&
=OM(ICKE(A2="BB");10;"")&
|