Предизвикателство на формула - флаг от кодове за последователност - Пъзел

Съдържание

Проблемът

Имаме списък с буквено-цифрови кодове. Всеки код се състои от една буква (A, B, C и др.), Последвана от 3-цифрено число. Тези кодове трябва да се показват в азбучен ред, но понякога те са извън последователността. Искаме да маркираме кодове извън последователността.

Предизвикателство # 1

Каква формула в колоната „Проверка“ ще постави „х“ до код, който е извън последователността? В това предизвикателство ние само проверяваме дали * числовата * част на кода е извън последователност, а не че самата буква не е в последователност.

Предизвикателство # 2

Как може формулата по-горе да бъде разширена, за да се провери дали "алфа" част от кода (A, B, C и др.) Не е в последователност? Например, трябва да маркираме код, който започва с „A“, ако се появи след код, който започва с „C“ или „B“.

Изтеглете работния лист по-долу и приемете предизвикателството!

Забележка: в работната книга има 2 листа, един за предизвикателство # 1, един за предизвикателство # 2.

Съвет - Това видео показва някои съвети за това как да решите проблем като този.

Предположения

  1. Всички кодове винаги съдържат четири знака: 1 главна буква + 3 цифри.
  2. Броят на кодовете на буква е произволен, но не трябва да има пропуски в числовите стойности.
  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, за да доставите само първия знак.

Интересни статии...