Показват се публикациите с етикет ifs. Показване на всички публикации
Показват се публикациите с етикет ifs. Показване на всички публикации

неделя, 24 септември 2023 г.

#67 Да съкращаваме (или удължаваме?!) с Let

    В последните версии се появи странната функция Let. Казвам странна, защото и аз първоначално се замислих защо ми е това. Например, имаме следната формула: =IF(K4>=42;K4;42), чрез която сравняваме стойността на клетка (в случая K4) с някаква стойност (в случая 42) и ако тя е под нея връща тази стойност. Дет се вика "Таквиз формули сме писали хиляди!". И наистина си е нормална функция IF. Но... прави впечатление, че стойността 42 я има два пъти, което може да подразни всеки програмист, който е учен (с бой) да си именува константите. Явно скучаейки, някой програмист в Microsoft е достигнал до извода, че в Excel няма как да се дефинират константи и променливи. И е създал функцията Let, която има следния синтаксис:

 Let(име1;с-ст; име2; с-ст; име3; стойност....; израз).

    Т. е. може да си дефинираме имена, които може да използваме в израза. По този начин формулите стават много по-добре четими и разбираеми. Умишлено не казвам, че функциите стават по-кратки, защото в някои случаи те се удължават. Но време е да се научим да пишем четими формули! И честно ще използвам Let от тук нататък. Формулата, която използвах за пример, може да бъде "опакована" чрез Let по следния начин:

=LET(val;K4;min;42; IF(val>=min; val; min))

    Във функцията се дефинират две имена (val и min), които се използват в израза. Функцията става по-четима и е по-лесно да се коригира, ако се наложи промяна на минималната стойност.

    Пример: Да се изведе годината на раждане на човек според неговия Единен Граждански Номер (ЕГН). Както знаете (или не знаете), че за икономия на цифри за годината на раждане се е наложило да се прави гимнастика с номера на месеца. Ако човек е раждан през XX-ти век (19хх година), номерът на месеца не е променян. Ако е раждан през XIX век към номера на месеца е добавено 20, а ако е раждане след 2000 година - към номера на месеца е добавено 40. 

T.e.

7602 - Човек, раждан през 1976 г. (месец февруари)

8722 - Човек, раждан през 1897 г. (месец февруари)

0242 - Човек, раждан през 2002 г. (месец февруари)

    Та, използвайки Let, ето и самото решение (Данните са в таблица и колонката се казва ЕГН. За това и формулата е с таблични препратки):

=LET(y;VALUE(LEFT([@ЕГН];2));m;VALUE(MID([@ЕГН];3;2));IFS(m>40;y+2000;m>20;y+1800;TRUE;y+1900))

    Дефинирани са две имена (y и m), които съдържат годината (първите две цифри) и месеца (следващите две цифри) от ЕГН-то. Тъй като ЕГН-то е представено като текст, се налага да се използва функцията Value за да се преобразува в числова стойност. Чрез функцията IFS (вижте  https://yuriy-excel.blogspot.com/2018/11/) се извършва получаването на реалната година на раждане.

    Та, когато имате нужда да си направите формулите по-разбираеми или когато имате нужда от помощна колонка, използвайте Let! 

Успех!




петък, 30 ноември 2018 г.

#63 Да вдигнем нивото или трябва ли ни Excel 2019

Длъжен да предупредя, че си инсталирах Excel 2019. Няма да тествам на по-стари версии и може да има проблеми с някой от решенията. Ще се старая да предупреждавам, че съм използвал нови възможности, но може да забравя!:)
Винаги е стоял въпроса дали да се преминава към по-новата версия на даден продукт. И както е в случая дали е по-добре "стационарния" Office  или да се използва Office 365, който е на абонаментен принцип.
Няма да влизам в дълги писания и реклами, но всеки от вариантите си имат плюсове и минуси. Едно от предимствата на Office 365 е че вие получавате веднага всички нови благинки, докато при стационарната версия чакате до следващия тираж (следващата версия).

Какво се появи в Excel 2019 може да прочетете тук: Какво е новото в Excel 2019 за Windows.

За да покажа, че новите благинки  помагат и улесняват ще се спра на функцията IFS.

Всеки преподавал Excel се поти, преподавайки вложени IF-ове, когато имаме няколко последователни условия. Обучаемите смятат, че са открили теорията на относителността, когато научат как се влагат условия. И искат да им пишем шестици за това:):) 

Задача: Да се преобразува числова оценка в оценка с думи

Вариант 1 - Класически IF
Преобразува се с помощта на "класически" вложени условия
Ако условие
  Действие
Иначе условие
   Действие
Иначе  условие
   Действие
Иначе
   Действие

IF(условие; ако е истина; IF(условие; ако е истина; IF(.....;ако е истина; иначе)...)

 =IF(H6<3;"Слаб";IF(H6<3.5;"Среден";IF(H6<"Добър";IF(H6<5.5;"Мн. добър";"Отличен"))))

Вариант 2 - Чрез IFS.
IFS НЕ ИЗИСКВА влагане. Всичко си е линейно и последователно.
IFS(условие; стойност ако е истина; условие; стойност ако е истина....) (за повече вижте синтаксиса в документацията на Microsoft).
Особеното е когато искаме да сложим стойност по подразбиране на края (частта ИНАЧЕ). Има два варианта: да сложим условие, което винаги е истина (например 1=1:) или просто да сложим константата TRUE вместо условието!

=IFS(H6<3;"Слаб";H6<3.5;"Среден";H6<4.5;"Добър";H6<5.5;"Мн. добър";TRUE;"Отличен")

Красиво и лесно! Няма влагане, няма хиляди скоби.

Успех с новите версии:)