неделя, 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! 

Успех!




Няма коментари:

Публикуване на коментар