Формула вызова - отметьте коды вне последовательности - Головоломка

Содержание

Эта проблема

У нас есть список буквенно-цифровых кодов. Каждый код состоит из одной буквы (A, B, C и т.д.), за которой следует трехзначное число. Эти коды должны появляться в алфавитном порядке, но иногда они не в порядке. Мы хотим помечать коды с нарушением последовательности.

Задача №1

Какая формула в столбце «Проверить» поместит «x» рядом с кодом, который находится вне очереди? В этой задаче мы проверяем только то, что * числовая * часть кода не соответствует последовательности, а не сама буква.

Задание # 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 символа. Это похоже на взлом и, возможно, делает код менее понятным, но это работает :)

Если это оскорбляет ваши чувства, используйте ВЛЕВО, как указано выше, внутри КОДА, чтобы ввести только первый символ.

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