Определение значений, не соответствующих определенному шаблону (Microsoft Excel)
В Вишваджите в столбце указан ряд номеров деталей. Эти номера деталей должны соответствовать определенному шаблону (2 цифры, 5 букв, 4 цифры, 1 буква, 1 цифра, 1 буква и 1 цифра). Он задается вопросом, есть ли способ легко определить, какая из ячеек в столбце отличается от этого шаблона.
Есть несколько способов подойти к этой задаче, в зависимости от истинной природы ваших данных. Например, вы можете использовать такую формулу во вспомогательном столбце:
=AND(LEN(A1)=15,ISNUMBER(--LEFT(A1,2)),ISTEXT(MID(A1,3,5)), ISNUMBER(--MID(A1,8,4)),ISTEXT(MID(A1,12,1)),ISNUMBER(-- MID(A1,13,1)),ISTEXT(MID(A1,14,1)),ISNUMBER(--RIGHT(A1,1)))
Формула (которая довольно длинная) возвращает True или False, в зависимости от того, верен шаблон или нет. Однако есть проблема с формулой. Он не будет улавливать символы, используемые вместо букв (например, знак доллара или звездочку), и не будет улавливать некоторые символы, используемые вместо чисел (например, точку или знак процента). Причина в том, что функция ISTEXT рассматривает символы как текст, а функция ISNUMBER анализирует что-то вроде «1.23» как число.
Если вы хотите поймать это неправильное использование символов, можно использовать следующую формулу:
=AND(LEN(A1)=15,ISNUMBER(SUM(SEARCH(MID(A1,{1,2,8,9,10,11, 13,15},1),"0123456789"),SEARCH(MID(A1,{3,4,5,6,7,12,14},1), "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))))
Этот работает, потому что он использует функцию ПОИСК для эффективной проверки каждого символа в номере детали. Можно подумать, что вам может потребоваться ввести формулу как формулу массива (завершив ее с помощью Ctrl + Shift + Enter), но, что интересно, я не получаю никакой разницы в результатах, когда использую ее как обычную формулу по сравнению с формулой массива.
Если вам нужно немного проверить образцы номеров деталей, вы можете рассмотреть возможность использования макроса для выполнения проверки. Ниже приводится короткая определяемая пользователем функция, в которой оператор Like используется для проверки соответствия шаблону.
Function CheckPattern(rCell As Range) As Boolean Dim sPattern As String sPattern = "##[A-Z][A-Z][A-Z][A-Z][A-Z]####[A-Z]#[A-Z]#" CheckPattern = rCell.Value Like sPattern End Function
Обратите внимание на использование переменной sPattern. Это шаблон, которому следует следовать, когда оператор Like выполняет свое сравнение. Каждое появление символа # означает, что в этой позиции может находиться любая цифра. Каждое появление [A-Z] означает, что позиция может быть одной буквой в диапазоне от A до Z.
Вы можете узнать больше о значениях символов, которые вы можете включить в шаблон, посетив эту страницу на одном из сайтов Microsoft:
https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/like-operator
Этот сайт на самом деле предназначен для Visual Basic, а не для VBA, но эта конкретная страница информации будет отлично работать в VBA.
Чтобы использовать определяемую пользователем функцию CheckPattern, вы можете поместить следующее в любую ячейку вашего рабочего листа:
=CheckPattern(A1)
Это предполагает, что номер детали находится в ячейке A1, как и все другие формулы, представленные в этом совете.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (3391) применим к Microsoft Excel 2007, 2010, 2013 и 2016.