Буквенно-цифровая проверка в Microsoft Excel

1- Я хотел бы использовать правило проверки для входной ячейки, где запись должна состоять из 7 или 8 буквенно-цифровых символов.

2- в начале строки используемые альфа-каналы должны состоять из 1 или 2 символов в верхнем регистре.

3- в конце строки числовое значение всегда будет состоять из 6 символов.

4- Следующие типы записей должны быть проверены ФД456789 X256325 Z899666 DQ985421 FD000052

5-Я создал формулу проверки. он отлично работает, за исключением того, что он не может проверить 2-й символ как алфавит в строке. я использовал AP656569 и A5656569 для тестирования. он должен разрешать только AP656569, но, наоборот, разрешает обе строки.

Формула: =AND(OR(LEN(A3)=7,LEN(A3)=8),ISNUMBER(VALUE(RIGHT(A3,6))),IF(LEN(A3)=7,NOT(ISNUMBER(VALUE(LEFT(A3,1)))),ISTEXT(MID(A3,2,1))))

На ум приходят условное форматирование и текстовые функции, такие как left() и len(). Но приложите некоторые усилия, это не бесплатный сервис кодирования. Однако я дал вам подсказки.

Solar Mike 20.12.2020 07:21
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
1
1 045
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете попробовать:

=AND(AND(LEN(A1)>6,LEN(A1)<9,ISNUMBER(RIGHT(A1,6)*1),CODE(A1)>64,CODE(A1)<91),IF(LEN(A1)=8,AND(CODE(MID(A1,2,1))>64,CODE(MID(A1,2,1))<91),1))
  • =AND( - Давайте проверим две вещи:
    • AND( - Проверьте, выполняются ли несколько условий TRUE:
      • LEN(A1)>6 - Проверить, превышает ли строка 6 символов.
      • LEN(A1)<9 - Проверьте, содержит ли строка менее 9 символов.
      • ISNUMBER(RIGHT(A1,6)*1 - Проверьте, составляют ли 6 крайних правых символов числовое значение.
      • CODE(A1)>64,CODE(A1)<91 - Проверьте, относятся ли самые левые символы к классу [A-Z].
    • IF( - Проверьте следующее:
      • LEN(A1)=8 - Проверьте, действительно ли длина равна 8.
        • AND( - Если TRUE, то проверьте следующее:
          • CODE(MID(A1,2,1))>64,CODE(MID(A1,2,1))<91 - Проверить, учится ли второй персонаж в классе [A-Z].
        • 1 - Если длина не ложна, она все равно будет 7, поэтому мы возвращаем 1 (равное TRUE), чтобы не связываться с нашим родителем AND().

Вы можете применить это к своему пользовательскому правилу проверки в виде формулы, если хотите избежать ложных данных, или, как указано в комментариях к условному форматированию, если вы хотите иметь возможность отображать ложные данные после их ввода.


В качестве альтернативы, если у вас Excel 2019 или более поздней версии и вам нравится код-гольф, вы можете использовать:

=AND(ISNUMBER(RIGHT(A1,6)*1),CODE(A1)>64,CODE(A1)<91,SWITCH(LEN(A1),7,1,8,AND(CODE(MID(A1,2,1))>64,CODE(MID(A1,2,1))<91),0))

Большое спасибо, дорогой @JvdV. Ваше решение сработало отлично, это было здорово.

Muhammad Rehan 22.12.2020 12:55

@MuhammadRehan, приятно это слышать. Вы можете поставить галочку слева от ответа, чтобы закрыть тему.

JvdV 22.12.2020 21:16

@MuhammadRehan Ты выбрал мой ответ, а не JvdV. :С

Evil Blue Monkey 29.12.2020 11:20

Ваши условия не исключают строку типа A1234567 (1 заглавная буква, 7 цифр). В соответствии с вашими условиями и при условии, что ваша строка находится в ячейке A1, эта формула должна работать:

=AND(OR(LEN(A1)=7,LEN(A1)=8),OR(IFERROR(LEFT(A1,1)*1,0)=0,AND(IFERROR(LEFT(A1,1)*1,0)=0,IFERROR(LEFT(A1,2)*1,0)=0)),UNICODE(A1)=UNICODE(UPPER(A1)),UNICODE(MID(A1,2,1))=UNICODE(UPPER(MID(A1,2,1))),IFERROR(MID(RIGHT(A1,6),1,1)*1,0),IFERROR(MID(RIGHT(A1,6),2,1)*1,0),IFERROR(MID(RIGHT(A1,6),3,1)*1,0),IFERROR(MID(RIGHT(A1,6),4,1)*1,0),IFERROR(MID(RIGHT(A1,6),5,1)*1,0),IFERROR(MID(RIGHT(A1,6),6,1)*1,0))

Это в основном функция AND, которая содержит:

  • условие для проверки длины строки: OR(LEN(A1)=7,LEN(A1)=8)
  • условие для проверки, являются ли первые 2 символа строки буквами (только первые или оба): OR(IFERROR(LEFT(A1,1)*1,0)=0,AND(IFERROR(LEFT(A1,1)*1,0)=0,IFERROR(LEFT(A1,2)*1,0)=0))
  • условие для проверки того, является ли первый символ заглавным: UNICODE(A1)=UNICODE(UPPER(A1))
  • условие для проверки, является ли второй символ заглавным: UNICODE(MID(A1,2,1))=UNICODE(UPPER(MID(A1,2,1)))
  • условие для каждых последних 6 символов, чтобы проверить, являются ли они числовыми (пример относится к первому): IFERROR(MID(RIGHT(A1,6),1,1)*1,0)

Обновлено: Улучшения

Формулу можно улучшить следующим образом:

=AND(OR(LEN(A1)=7,LEN(A1)=8),OR(IFERROR(LEFT(A1,1)*1,0)=0,AND(IFERROR(LEFT(A1,1)*1,0)=0,IFERROR(LEFT(A1,2)*1,0)=0)),EXACT(LEFT(A1,2),UPPER(LEFT(A1,2))),ISNUMBER(RIGHT(A1,6)*1))

Это все еще функция AND. Это изменения:

  • он содержит одно условие для проверки того, являются ли первые 2 символа заглавными (ранее было по 1 для каждого символа, который использовал функцию UNICODE):
  • он содержит одно условие для последних 6 символов, чтобы проверить, являются ли они числовыми (ранее было 1 для каждого символа, который использовал функцию ЕСЛИОШИБКА): EXACT(LEFT(A1,2),UPPER(LEFT(A1,2)))

Обновлено: исправление

Чтобы исключить специальный символ, я отредактировал формулу:

=AND(OR(LEN(A1)=7,LEN(A1)=8),OR(AND(UNICODE(A1)>64,UNICODE(A1)<91,ISNUMBER(MID(A1,2,1)*1)),AND(UNICODE(A1)>64,UNICODE(A1)<91,UNICODE(MID(A1,2,1))>64,UNICODE(MID(A1,2,1))<91)),EXACT(LEFT(A1,2),UPPER(LEFT(A1,2))),ISNUMBER(RIGHT(A1,6)*1))

Я проверил еще раз, и это не подтверждается должным образом. Он проверяет :B123456 как TRUE и FD000052 как FALSE. Оба неверны. Ваше улучшение исправляет этот последний случай, но по-прежнему проверяет неправильные начальные символы за пределами [A-Z].

JvdV 20.12.2020 13:27

Хм, я не рассматривал «специальные символы» как «:». Виноват. Я не понимаю, почему FD000052 не работает. Вы поставили пробел в конце строки? В этом случае это снова ошибка «специального символа». Проверьте, работают ли решения JvdV, пока я изменяю формулу. Угадайте, что подход JvdV UNICODE - это путь.

Evil Blue Monkey 20.12.2020 13:40

Просто также обратите внимание, что обе ваши версии проверяют A5656569, что, я думаю, должно потерпеть неудачу, так как содержит более 6 цифр.

JvdV 20.12.2020 13:43

@JvdV да, но это не противоречит инструкциям спрашивающего, и я подчеркнул это в начале своего ответа.

Evil Blue Monkey 20.12.2020 15:34

Оп специально упомянул в своем вопросе, что A5656569 не разрешен.

JvdV 20.12.2020 16:07

Ах, он добавил пункт 5, пока я уже работал. Зная это, я бы тоже выбрал функцию ЕСЛИ. Думаю, я просто позволю ему выбрать ваше решение. Более элегантный и фактически работающий без дальнейшего редактирования. Также я не заметил, что первый комментарий (12:27:21Z) был твоим. ^^

Evil Blue Monkey 20.12.2020 16:09

Проверка правил с помощью формул просто утомительна. Другие приложения могут поддерживать регулярное выражение, что было бы очень просто. Легко ошибиться со всем этим вложением.

JvdV 20.12.2020 16:28

Другие вопросы по теме