Excel IF() – Insane Level

Multe probleme din domenii diverse de activitate se pot rezolva in Microsoft Excel. În timp devin rutină și nu le mai dăm importanță…. sau le tratăm superficial, sau … cum îmi place mie să spun facem coloane ajutătoare… și ajutătoare și coloane ajutătoare la cele ajutătoare :)

Astăzi am o provocare pentru cei care vor să-și pună mintea la contribuție.

Se dă următorul tabel de date:

InsaneIF

Specificați, care este formula de calcul pentru a determina procentul de AC (Adaos comercial – pentru cei care nu știu) după următorul algoritm:

Stoc Pret<5 Pret<10 Pret<15 Pret>=15
<500 AC=1 AC=2 AC=3 AC=4
<1000 AC=5 AC=6 AC=7 AC=8
<1500 AC=9 AC=10 AC=11 AC=12
>=1500 AC=13 AC=14 AC=15 AC=16

Exemplu: dacă prețul este mai mic decât 10 și stoc < 1000, adaos comercial va fi 6%. Dacă Prețul este mai mare sau egal decât 15 și stocul < 1500 atunci adaosul comercial va fi de 12%.

Soluțiile le trimiteți pe e-mail până în data de 10.03.2013 ora 22:00.

Vă rog să nu puneți comentarii cu formula până nu se termină timpul alocat!

Succes!

Update 10.03.2013 după ora 22:00

 

Trăim într-o lume dinamică, dar cu mult prea multe aspecte statice. De multe ori spuneam că ceea ce nu vedem nu avem cum să înțelegem sau invers, așadar justific numărul mic de răspunsuri prin prezența slabă în social media într-o zi de duminică.

Câteva explicații teoretice:

Sunt conștient că vin dintr-o zonă academică, dar astfel de probleme provin din practică. Rolul cercetării ar fi acela de optimizare a metodelor de lucru din practică, și găsirea celor mai rapide metode de rezolvare a problemelor.

Așadar, cele mai comune probleme din domeniul economic, vin din zona interpretării intervalelor de valori. Mulți practicieni folosesc Excelul într-un mod… ”minunat” ( a se citi: de te crucești) dar mi-a fost dat să întâlnesc și oameni care știu clar că datele le înregistrezi în baze de date, pe baza cărora faci rapoarte, iar dacă vrei grafice și floricele, cel mai bine este să conectezi Excelul la acea sursă de date și să faci interpretări câte în lună și în stele.

Revin la problema cu intervalele:

Funcția IF() permite selectarea unei acțiuni din două posibile pe baza evaluării unei condiții.

Formatul general al funcţiei este (pentru setări ale calculatorului cu Regional Settings Romania):

=IF(conditie;actiune_adevarat;actiune_fals)

image

Introducerea unei funcţii IF într-o foaie de calcul se poate realiza prin una din următoarele metode:

1. Acţionarea pictogramei Insert Function din linia Formula bar. În acest caz apare fereastra pentru alegerea funcţiei dorite. Se selectează categoria de funcţii (în cazul nostru Logical) şi apoi funcţia IF;

2. Precizarea argumentelor funcției: condiția (Logical_test), acțiunea adevărat (Value_if_true) și acțiunea fals (Value_if_false);

3. Finalizarea funcției prin apăsarea butonului OK.

Altă metodă de deschidere a constructorului de funcții este utilizarea meniului Formulas, opțiunea Logical și se alege din listă formula IF sau scrierea funcţiei utilizând tastatura și, în anumite cazuri, mouse-ul.

Problemele clasice cu IF-uri sunt cele legate de intervale de valori: Discounturi, Impozite/Taxe, Ajustari.

Intervalele de valori pot fi într-o dimensiune, două dimensiuni intersectate sau mai multe. Până la această oră am reușit să determin algoritmul de calcul matematic pentru prima și a doua dimensiune.

O singură dimensiune

Dacă ai un interval de valori pentru care trebuie să faci o funcție IF atunci numărul de IF-uri dintr-o funcție Excel este egal cu numărul intervalelor minus unu.

Exemplu:

Să se calculeze procentul de discount acordat pe o comandă de produse, in funcție de următoarele criterii:

  • o in cazul in care cantitatea este mai mic decât 10 – atunci procentul de discount este de 0%
  • o cantitate mai mare decât 10 si mai mic decât 15 atunci discount 0,5%
  • o cantitate mai mare decât 15 si mai mic decât 20 atunci discount 1%
  • o cantitate intre 20 si 25 atunci discount 1,25%
  • o cantitate mai mare decât 25 atunci discount 1,5%

Intervalul de valori este în cazul nostru: 0 – 10 – 15 – 20 – 25 – x adică 5 intervale de valori, ceea ce înseamnă în grafic 5-1 ==> 4 funcții IF.

Cel mai simplu este să tratezi un interval de valori într-un IF de jos în sus.

Două dimensiuni

Problemele se complică puțin când avem două dimensiuni care depind una de cealaltă și în care trebuie să tratăm toate combinațiile posibile. Doar în scop de exemplu:

Calculați prețul de vânzare fără TVA (per unitate) al produselor după următoarele constrângeri:

  • dacă stocul este mai mare sau egal decât 1000, și prețul este mai mare sau egal cu 5 lei, adaosul comercial va fi 20%,
  • dacă stocul este mai mare sau egal decât 1000, și prețul este mai mic de 5 lei, adaosul comercial va fi 25%,
  • dacă stocul este mai mic decât 1000, și prețul este mai mare sau egal cu 5 lei, adaosul comercial va fi 25%,
  • dacă stocul este mai mic decât 1000, și prețul este mai mic de 5 lei, adaosul comercial va fi 30%.

Așadar, în acest exemplu avem două intervale de valori: stocul și prețul pe care trebuie să le tratăm global:

Schematic:

  • Stoc: 0 – 1000 – x
  • Preț: 0 – 5 – y

Modul de calcul al IF-urilor care vor apărea în formulă este: numărul de intervale de pe prima dimensiune minus 1 + numărul de intervale de pe a doua dimensiune înmulțit cu numărul de deasupra minus 1.

Așadar:

  • Stoc: 0 – 1000 – x ==> două intervale ==> 2-1 = 1 +
  • Preț: 0 – 5 – y ==> două intervale ==> 2x(2-1)=2×1=2=3

 

Folosind algoritmul în două dimensiuni

Soluția problemei din articolul inițial este:

75079_10200943603212056_225359347_n

Asta înseamnă rezolvare corectă din punct de vedere didactico-teoretic. O soluție pe care oricine o poate înțelege, reproduce și controla. În același timp: Schema scrie formula!

Cine a câștigat competiția inițială?

Sper că toți cei care văd acest algoritm de lucru.

În fapt, din totalul celor 194 care au deschis articolul,  au trimis e-mail (ordonat după timp) următorii:

1. Cristiana R. – Soluție funcțională în 16 IF-uri

2. Andreea A. – Soluție optimă în 15 IF-uri

Soluția ei:

=IF(E2<5,IF(D2<500,1,IF(D2<1000,5,IF(D2<1500,9,13))),IF(E2<10,IF(D2<500,2,IF(D2<1000,6,IF(D2<1500,10,14))),IF(E2<15,IF(D2<500,3,IF(D2<1000,7,IF(D2<1500,11,15))),IF(D2<500,4,IF(D2<1000,8,IF(D2<1500,12,16))))))

3. Catalin D. – Soluție funcțională folosind Macro-uri… Nu face parte din concurs, dar este o soluție ingenioasă.

4. Vladut A.P. – Soluție funcțională în 20 IF-uri

5. Radu G. – Soluție nefuncțională pentru că nu utilizează IF-uri, dar deosebit de interesantă:

=OFFSET(Sheet2!$B$2; MATCH(D2; Sheet2!$B$3:$B$6; 1); MATCH(E2; Sheet2!$C$2:$F$2; 1))

Tabelul din Sheet2:

    Pret<5 Pret<10 Pret<15 Pret>=15
    0 5 10 15
Stoc<500 0 1 2 3 4
Stoc<1000 500 5 6 7 8
Stoc<1500 1000 9 10 11 12
Stoc>=1500 1500 13 14 15 16

 

6. Ciprian a mai propus o soluție cu 96 de IF-uri…

7. Dragos si B.S. a propus o soluție funcțională cu 16 IF-uri.

Mulțumesc tuturor pentru implicare!

Future

Lucrez la algoritmul de calcul pentru 3 intervale… încă nu-mi iese… ceva…

Spor în ceea ce faceți și dacă mai aveți probleme interesante nu ezitați să le aruncați pe mail.

UPDATE 11.03.2013 după ora 9:30

Una din cele mai interesante soluții pe care am primit-o în dimineața aceasta de la Ionuț E. este cu o funcție IF ultra simplificată. Asta din cauză că procentele de AC sunt consecutive. Smart!

=IF(STOC<500,0,IF(STOC<1000,4,IF(STOC<1500,8,12)))+IF(PRET<5,1,IF(PRET<10,2,IF(PRET<15,3,4)))

Da merge!!! Că am testat. Dacă AC-ul ar fi fost altfel, dar proporțional probabil că ar fi găsit algoritmul de însumare.

De asemenea, la cererea publicului voi dezvălui soluția magică cu macro a lui Catalin D. El a creat un nou modul in VBA și a definit o nouă funcție cu numele IFS(). Codul funcției este.

Function Ifs(pret_ As Integer, stoc_ As Integer) As Double
    Application.Volatile True
    Select Case pret_
        Case Is < 5 And stoc_ < 500
                    Ifs = 0.01
        Case Is < 5 And stoc_ < 1000
                    Ifs = 0.06
        Case Is < 5 And stoc_ < 1500
                    Ifs = 0.09
        Case Is < 5 And stoc_ >= 1500
                    Ifs = 0.13
        Case Is < 10 And stoc_ < 500
                    Ifs = 0.02
        Case Is < 10 And stoc_ < 1000
                    Ifs = 0.06
        Case Is < 10 And stoc_ < 1500
                    Ifs = 0.1
        Case Is < 10 And stoc_ >= 1500
                    Ifs = 0.14
        Case Is < 15 And stoc_ < 500
                    Ifs = 0.03
        Case Is < 15 And stoc_ < 1000
                    Ifs = 0.07
        Case Is < 15 And stoc_ < 1500
                    Ifs = 0.11
        Case Is < 15 And stoc_ >= 1500
                    Ifs = 0.15
         Case Is >= 15
                Select Case stoc_
                    Case Is < 500
                         Ifs = 0.04
                    Case Is < 1000
                         Ifs = 0.08
                     Case Is < 1500
                         Ifs = 0.12
                     Case Is >= 1500
                         Ifs = 0.16
                End Select
    End Select
End Function

Pentru cei care doresc să studieze mai mult macro și VBA în Excel le recomand cărțile:

 

Succes și mulțumesc pentru interes.

Imagine Cup 2013 – News (3)

În sfârșit după o perioadă lungă de timp, avem informații despre Imagine Cup 2013.

Trofeul Imagine Cup 2013Vestea bună, este că anul acesta Microsoft România s-a organizat puțin mai rapid și avem o dată aproape certă pentru finala Imagine Cup pe România. Vestea și mai bună este că se va organiza această finală.

Așadar finala națională va fi în perioada 11-14 Aprilie 2013 la București. Probabil că vor apărea detalii despre locație între timp, dar se vorbește despre faptul că va fi organizată la Universitatea Politehnica București.

Tot de la Alex Bogdan, ADE de la Microsoft România, avem și următoarele clarificări legate de finală din România:

Finala națională este doar pentru primele trei competiții: Games, Innovation și World Citizenship.

(1) Vom avea premii naționale pentru fiecare competiție in parte.

(2) Putem sa trimitem la finala mondiala o singură echipa, aleasă din cele 3 competiții.

(3) Pentru a maximiza șansele României la finala mondială vom selecta dintre cele trei competiții o singură echipă care va avea, în părerea juriului, cele mai mari șanse să câștige finala mondială.

Juriul se dorește a fi format din minim 5 membrii, dar momentan nu avem detalii legate de componența juriului. Personal am fost întrebat dacă aș fi dispus să continui ca membru al Juriului și mi-am exprimat acordul de principiu. Am provocat multe supărări dea lungul anilor în rândul mentorilor și participanților, dar am încercat tot timpul să fiu pozitiv în relația cu toată lumea și cred că mi-am jucat rolul de moderator în discuții și dezbateri. Din păcate am acceptat și învățat cu greu în timp că întotdeauna există un singur loc I, iar supărările celor de pe celelalte locuri sunt perfect justificate de faptul că le pasă de ceea ce fac și pun suflet în proiectele lor!

Pentru cele trei challenges (Windows 8 App, Windows Azure, Windows Phone) totul se întâmplă online.

Mai jos câteva detalii despre calendar și statistici:

Brain Games

Avem înregistrați peste 200 de studenți.

Date importante:

  • 4-15 Martie: World Citizenship Quiz 2
  • 1-12 Aprilie: Games Quiz 2
  • 15 Mai – Anunțarea finalistului care va participa prin tragere la sorți în Finala din Rusia.

Status pentru competițiile Challenge: Suntem în runda a doua: on-line finals.

Date importante pentru toate secțiunile de tip Challenge:

  • 15 Aprilie 2013 – Online Finals submission deadline for all countries

Windows 8 App Challenge

Sunt înregistrați 47 studenți. 16 echipe s-au calificat pentru runda a doua.

Windows Azure Challenge

Sunt înregistrați 38 studenți. 14 echipe s-au calificat pentru runda a doua.

Windows Phone Challenge

Sunt înregistrați 23 studenți din România și 1 din Republica Moldova. Au mers mai departe în runda a doua 8 echipe din România și 1 din Moldova.

Pentru celelalte secțiuni:

  • există finală în România;
  • va fi aleasă o singură echipă care să meargă la finala din Rusia;
  • proiectele trebuie încărcate pe site-ul ImagineCup.com conform regulilor oficiale de participare;
  • Games Competition: 50 studenți înregistrați, 13 echipe formate;
  • Innovation Competition: 25 studenți înregistrați, 4 echipe formate;
  • World Citizenship: 35 studenți înregistrați, 10 echipe formate;

 

Cam atât. Dacă mai aveți alte noutăți în afară de ceea ce am reușit eu să aflu, puneți în comentarii.

Succes maxim tuturor!

I lost a survey answers! #SharePoint stuff

Disclaimer

Microsoft does not recommend to work directly with SharePoint databases.

The Context

Often, in the current activity of a company, we need surveys to study the opinion of colleagues, employees or customers. Any such process requires a stage of questionnaire design, approval, testing and publishing. But, unfortunately, it may cause errors in the workflow approval. As we all know, the most common errors are typo mistakes.

The Mistake

The questionnaire is published, users began to fill in the data, possibly anonymous (no login), and someone noted that there was a mistake in the text. The temptation of the author or owner of the questionnaire is to go into the settings and change incorrect response options.

A classic mistake, because after the change, if you access the Graphical Summary of survey, we will see a situation like the following.

Rating Scale (a matrix of choices or a Likert scale)

As you see, even though the questionnaire is in Romanian language, there are several answers (134) and the percentage shown in the graphical representation is different from 100%.

Quick solution

When you change the options in a survey question, the old values are no longer displayed. The good news is that the data is in the database and can be extracted from there with a simple select statement.

1. Get the survey ID

Go into Survey Settings and copy from your browser’s address bar the last part of the URL. Sample: List=%7B8D291BD5-1C23-4C58-8CED-67E7D0914C2C%7D

You need only the string with bold into my sample. %7B = { and %7D = }

2. Identify the content database for your current site.

On a SharePoint server run in PowerShell: Get-SPContentDatabase -site <URL>

Sample result:

Id               : 7c750508-9196-4821-9670-59ea2cc03efd
Name             : P_PortalFEAA_Content
WebApplication   : SPWebApplication Name=P_Portal
Server           : bdsrv-02
CurrentSiteCount : 2

3. Get data back!

On database server open SQL Server Management Studio and open a new query window and run the next SQL statement:

SELECT *
  FROM [P_PortalFEAA_Content].[dbo].[UserData]
  where tp_ListId = ‘8D291BD5-1C23-4C58-8CED-67E7D0914C2C’
 

You will obtain a list of records with all your answers. Select all records, Copy and Paste into an Excel worksheet and manipulate data as you want.

Now all the answers are “back”.

Learnings

Never modify variants of questions from a survey after it has been published!

Blog la WordPress.com.

SUS ↑