Есть ли способ проверить, содержатся ли символы в строке в массиве символов - НЕТ VBA - PullRequest
0 голосов
/ 23 января 2020

У меня длинная строка в Excel. Мне нужно проверить, соответствует ли каждый символ строки массиву символов. Например:

Array of allowed char: "i a m n o t I t e r s d *space*" --> CHECK OK
"I am not interested" --> check ok
"I am not very interested" --> check failed : v and y non allowed

Я пытался найти или сопоставить, но они просто ищут первый случай, ....

Ответы [ 2 ]

1 голос
/ 23 января 2020

Для подхода с учетом регистра, если у вас есть функция CONCAT, вы можете использовать следующее:

(Для нечувствительного к регистру замените FIND на SEARCH)

=IF(OR(ISERR(FIND(MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1),1)),1),CONCAT(" ",AllowedChars)))),"check failed", "check ok")

Если у вас нет функции CONCAT, замените ее в формуле простой строкой допустимых символов:

=IF(OR(ISERR(FIND(MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1),1)),1)," iamnotItersd"))),"check failed", "check ok")

и обратите внимание, что некоторые более ранние версии Excel требуют подтверждения этой формулы массива, удерживая нажатой ctrl + shift при нажатии , введите . Если вы сделаете это правильно, Excel поместит фигурные скобки {...} вокруг формулы, отображаемой в строке формул.

  • функция MID(… создает массив отдельных символов в тестовой строке
  • FIND затем учитывает регистр FIND всех символов в тестовой строке для символов в AllowedChars
  • FIND вернет ошибку #VALUE!, если символ не найдено.
  • OR(ISERR(… вернет TRUE, если будут обнаружены сбои.

Редактировать дальнейшее объяснение:

  • ISERR(… вернет массив логических значений {FALSE,FALSE,FALSE,FALSE,TRUE, … } в зависимости от того, возвращает ли каждый FIND номер ошибки #VALUE!

  • OR оценивает этот массив и возвращает TRUE, если вообще есть какая-либо ошибка.

Где AllowedChars относится к диапазону, в котором хранятся разрешенные символы.

CONCAT игнорирует пустые ячейки в диапазоне, поэтому мы должны добавить пробел в качестве одного из аргументов.

enter image description here

0 голосов
/ 23 января 2020

С помощью списка допустимых символов UNIQUE в диапазоне (я использовал D1: D10) можно сравнить сумму разности удаления каждого символа и длину строки без пробелов:

=SUMPRODUCT(LEN(A1)-LEN(SUBSTITUTE(A1,$D$1:$D$10,"")))+1 = LEN(SUBSTITUTE(A1," ",""))

Эта формула игнорирует регистр, и список должен быть уникальным списком разрешенных символов. I и i совпадают с тем, что видит Excel, и только один может быть в списке.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...