![](https://cdn.wiki-base.com/5018029/formula_challenge_-_flag_out_of_sequence_codes_puzzle.png.webp)
Проблемът
Имаме списък с буквено-цифрови кодове. Всеки код се състои от една буква (A, B, C и др.), Последвана от 3-цифрено число. Тези кодове трябва да се показват в азбучен ред, но понякога те са извън последователността. Искаме да маркираме кодове извън последователността.
Предизвикателство # 1
Каква формула в колоната „Проверка“ ще постави „х“ до код, който е извън последователността? В това предизвикателство ние само проверяваме дали * числовата * част на кода е извън последователност, а не че самата буква не е в последователност.
Предизвикателство # 2
Как може формулата по-горе да бъде разширена, за да се провери дали "алфа" част от кода (A, B, C и др.) Не е в последователност? Например, трябва да маркираме код, който започва с „A“, ако се появи след код, който започва с „C“ или „B“.
Изтеглете работния лист по-долу и приемете предизвикателството!
Забележка: в работната книга има 2 листа, един за предизвикателство # 1, един за предизвикателство # 2.
Съвет - Това видео показва някои съвети за това как да решите проблем като този.
Предположения
- Всички кодове винаги съдържат четири знака: 1 главна буква + 3 цифри.
- Броят на кодовете на буква е произволен, но не трябва да има пропуски в числовите стойности.
- Необходимо е само да се маркира първият код с буква от последователност, а не всички следващи кодове.
Ето някои работещи решения. Важно е да разберете, че има много, много начини за решаване на често срещани проблеми в Excel. Отговорите по-долу са само моите лични предпочитания. Във всички формули по-долу имената на функциите могат да се кликват, ако искате повече информация.
Предизвикателство # 1
Първоначално отидох с тази формула:
=IF((LEFT(B5)=LEFT(B6))*(MID(B5,2,3)+1MID(B6,2,3)+0),"x","")
Забележка MID връща текст. Чрез добавяне на 1 и добавяне на нула получаваме Excel да принуждава текста в число. Умножението вътре в логическия тест вътре в IF използва логическа логика, за да се избегне друг вложен IF. Не съм сигурен защо не използвах НАДЯСНО, което би работило добре и тук.
Също така имайте предвид, че LEFT не изисква броя на символите и ще върне първия знак, ако не е предоставен.
Въз основа на някои от интелигентните отговори по-долу можем да оптимизираме малко повече:
=IF((LEFT(B5)=LEFT(B6))*(MID(B6,2,3)-MID(B5,2,3)1),"x","")
Тук математическата операция за изваждане на MID от MID автоматично принуждава текстовите стойности към числа.
Предизвикателство # 2
За това решение използвах няколко вложени IF (добавени са прекъсвания на редове за четливост):
=IF(LEFT(B5)=LEFT(B6), IF((MID(B5,2,3)+1MID(B6,2,3)+0),"x",""), IF(CODE(B5)+1CODE(B6),"x",""))
Направих това, защото първият тест LEFT (B5) = LEFT (B6) определя дали проверяваме цифри или букви. Ако първият знак е същият, проверяваме числата по-горе. Ако не, проверяваме само първата буква.
Обърнете внимание, че функцията CODE ще върне ascii номера на първия символ, ако текстов низ съдържа повече от 1 символ. Това се усеща като хак и може да направи кода по-малко разбираем, но работи :)
Ако това обижда вашата чувствителност, използвайте НАЛЯВО, както по-горе, вътре в CODE, за да доставите само първия знак.