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))))


Вы можете попробовать:
=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. Ваше решение сработало отлично, это было здорово.
@MuhammadRehan, приятно это слышать. Вы можете поставить галочку слева от ответа, чтобы закрыть тему.
@MuhammadRehan Ты выбрал мой ответ, а не JvdV. :С
Ваши условия не исключают строку типа 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)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)Обновлено: Улучшения
Формулу можно улучшить следующим образом:
=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. Это изменения:
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].
Хм, я не рассматривал «специальные символы» как «:». Виноват. Я не понимаю, почему FD000052 не работает. Вы поставили пробел в конце строки? В этом случае это снова ошибка «специального символа». Проверьте, работают ли решения JvdV, пока я изменяю формулу. Угадайте, что подход JvdV UNICODE - это путь.
Просто также обратите внимание, что обе ваши версии проверяют A5656569, что, я думаю, должно потерпеть неудачу, так как содержит более 6 цифр.
@JvdV да, но это не противоречит инструкциям спрашивающего, и я подчеркнул это в начале своего ответа.
Оп специально упомянул в своем вопросе, что A5656569 не разрешен.
Ах, он добавил пункт 5, пока я уже работал. Зная это, я бы тоже выбрал функцию ЕСЛИ. Думаю, я просто позволю ему выбрать ваше решение. Более элегантный и фактически работающий без дальнейшего редактирования. Также я не заметил, что первый комментарий (12:27:21Z) был твоим. ^^
Проверка правил с помощью формул просто утомительна. Другие приложения могут поддерживать регулярное выражение, что было бы очень просто. Легко ошибиться со всем этим вложением.
На ум приходят условное форматирование и текстовые функции, такие как left() и len(). Но приложите некоторые усилия, это не бесплатный сервис кодирования. Однако я дал вам подсказки.