Проверка ввода. Только разрешённые символы. Без VBA.

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
tolikt
Сообщения: 93
Зарегистрирован: 29 окт 2005, 12:33
Откуда: NewVasюbirsk

Задали вопрос такой.
Как в Данные->Проверка осуществить возможность ввода только латиницы, цифр и дефиса. Но без VBA. Ибо макросы могут быть отключены.

Поискал тут, не нашёл.

То, что получилось у меня, называется "автогеном через задницу". Тем не менее, выкладываю для примера.
Пояснения в самом примере, но основные такие:
Проверяется корректность ввода символов в ячейке A1 на Лист1. Для проверки используется вспомогательный лист "ПроверочныйЛист". На котором адрес проверяемой ячейки, список разрешённых символов, вспомогательные формулы для каждого cимвола из вводимого текста. Ячейка с результатом проверки (Можно/Нельзя) является именованным диапазоном. В Лист1!A1 проверка осуществляется через Данные->Проверка с помощью формулы. На всякий случай ограничена длина текста в 1024 символа.
Для проверки других ячеек с другим набором символов нужно использовать другие столбцы по образцу столбца A. С присвоением имени ячейки в строке 3 и вводом этого имени в формулу Данные->Проверка основного листа.

Скорее всего, у кого-то есть гораздо более простой вариант. Желательно без вспомогательно листа/диапазона. И, само собой, без макросов.

PS. Проверка обходится стандартным способом через Копировать/Вставить. Но это уже обсуждалось на форуме.

Excel 97 rus
Вложения
SymbChek.zip
(13.07 КБ) 57 скачиваний
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

tolikt, элементарно ;)
Для условия вашего примера проверочной является следующая массивная формула

Код: Выделить всё

=СУММ(ЕСЛИ(ЕОШ(ПОИСК(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1);"0123456789abcdefghijklmnopqrstuvwxyz-"));0;1)*1)=ДЛСТР(A1)
Cлева от знака сравнения - количество допустимых символов - справа - количество всех символов.
Если они равны - строка подходящая.
Если нужно различать прописные и строчные буквы - вместо ПОИСК нужно использовать функцию НАЙТИ
Вместо текстовой константы с допустимым набором символов целесообразно предварительно определить имя
Ответить