Виклик формули - позначення з кодів послідовності - Головоломка

Зміст

Проблема

У нас є список буквено-цифрових кодів. Кожний код складається з однієї літери (A, B, C тощо), за якою йде 3-значне число. Ці коди повинні відображатися в алфавітному порядку, але іноді вони не відповідають послідовності. Ми хочемо позначити коди, що не відповідають послідовності.

Завдання №1

Яка формула в стовпці «Перевірка» розмістить «х» поруч із кодом, який не відповідає послідовності? У цьому виклику ми перевіряємо лише те, що * числова * частина коду не відповідає послідовності, а не те, що сама буква не відповідає послідовності.

Завдання No2

Як можна розширити наведену вище формулу, щоб перевірити, чи "алфавітна" частина коду (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 автоматично примушує текстові значення до чисел.

Завдання No2

Для цього рішення я використав кілька вкладених ІФ (додані розриви рядків для читабельності):

=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 символу. Це схоже на хакерство, і це робить код менш зрозумілим, можливо, але це працює :)

Якщо це ображає вашу чутливість, використовуйте LEFT, як зазначено вище, всередині CODE, щоб доставити лише перший символ.

Цікаві статті...