Страницы: 1
RSS
Проверка данных для ввода координат, Создание правила для проверки данных при вводе координат
 
Здравствуйте, форумчане!

Подскажите, пожалуйста, как мне, используя Проверку данных, сделать так, чтобы ячейка кушала ТОЛЬКО набор цифр в формате
Цитата
55.123456789, 38.123456789
то есть в формате [целая часть][точка][дробная часть][запятая][пробел][целая часть][точка][дробная часть]

Вот что я уже пыталась сделать:
Код
=И(КОДСИМВ(ЛЕВСИМВ(G2;1))>45;КОДСИМВ(ЛЕВСИМВ(G2;1))<58;ПОИСК(", ";G2);КОДСИМВ(ЛЕВСИМВ(G2;1))>45;КОДСИМВ(ЛЕВСИМВ(G2;1))<58)

  • работает хорошо, но допускает использование запятых там, где нужны именно точки
Код
=И(КОДСИМВ(ЛЕВСИМВ(G2;1;ПОИСК(".";G2;1)-1))>47;КОДСИМВ(ЛЕВСИМВ(U5;ПОИСК(", ";G2;1)-1))<58;КОДСИМВ(ПРАВСИМВ(G2;1;ПОИСК(", ";G2;1)-1))>47;КОДСИМВ(ПРАВСИМВ(G2;1;ПОИСК(".";G2;1)-1))<58)

  • работает хорошо, но так же допускает использование запятых там, где нужны именно точки
Код
=И(КОДСИМВ(ЛЕВСИМВ(G2;1))>47;КОДСИМВ(ЛЕВСИМВ(G2;1))<58;ПОИСК(".";G2);КОДСИМВ(ЛЕВСИМВ(G2;1))>47;КОДСИМВ(ЛЕВСИМВ(G2;1))<58;ПОИСК(", ";G2);КОДСИМВ(ЛЕВСИМВ(G2;1))>47;КОДСИМВ(ЛЕВСИМВ(G2;1))<58;ПОИСК(".";G2);КОДСИМВ(ЛЕВСИМВ(G2;1))>47;КОДСИМВ(ЛЕВСИМВ(G2;1))<58)


работает так же, как и верхние две.
С функцией НАЙТИ() вместо ПОИСК() - всё то же самое
Пробовала ПОИСКПОЗ() для нахождения точного соответствия условию поиска, но, почему-то, ПОИСКПОЗ(".";G2;0) благополучно игнорирует точку, если она находится в составе числа, например, 58.1
Прибегать к VBA нежелательно
Изменено: Almera - 23.01.2020 00:11:55
 
Маска:
??.?????????, ??.?????????
Объединяем два условия - соответствие маске и число:
=И(ПОИСК(маска;G2);
                                --ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(G2;",";);".";);" ";))
 
Цитата
vikttur написал: Маска:??.?????????, ??.?????????
Здравствуйте! Спасибо за Ваш отклик!
Скажите, а что такое Маска и как её создавать?
 
Она уже создана. Запишите ее вместо слова маска

Маска - это "слепок" значения, которое нужно проверить. В маске знак ? - один любой символ; точка, запятая, пробел указаны на своих местах.
Первое условие - если значение в ячейке совпадает с маской.
Второе условие - если после удаления точки, запятой и пробела  оставшиеся символы образуют число.

P.S.
Нужно добавить еще одно условие - проверку на длину текста. ПОИСК найдет значение по маске, даже если оно будет записао  с другим фрагментом
 
vikttur, благодарю!

Но дело в том, что в таком варианте мне необходимо обязательно заполнять все "?" цифрами, хотя координаты бывают и в виде 55.1239, 38.19 или даже 57.11, 31.447741
То есть количество символов в дробной части может доходить до нескольких десятков.
Нет ли другого способа?
Изменено: Almera - 23.01.2020 00:35:21
 
И сразу отпадает желание помогать... Как показали, так и получили.
Что правила форума пишут о файле-примере? Ознакомьтесь, прикрепите пример.

Запишем маску по другому - два удивленных ципленка :)
Код
*.*, *.*

P.S.
Нет, не работает полностью ни первый, ни второй вариант,  если вместо цифры стоит точка, запятая или пробел... Нужно дорабатывать
 
vikttur, прошу прощения, но сразу все нюансы невозможно усмотреть, поскольку с появлением новых решений появляются и новые трудности.

Прикрепляю файл-пример
 
Цитата
Запишем маску по другому - два удивленных ципленка  
Код
*.*, *.*
vikttur,
То что нужно! Спасибо огромное!
 
=--ПОДСТАВИТЬ(ЛЕВБ(A2;ПОИСК(", ";A2)-1);".";",")
=--ПОДСТАВИТЬ(ПСТР(A2;ПОИСК(", ";A2)+2;20);".";",")
=ДЛСТР(ПОДСТАВИТЬ(A2;" ";))=ДЛСТР(A2)-1

Проверьте. Объедините три условия.
 
Цитата
Almera написал: То что нужно!
Нет, не то. Дописал в сообщении...
 
vikttur,
Вы уверены? У меня теперь работает как я и хотела.

Цитата
Проверьте. Объедините три условия.
Проверила, возвращает ошибку. Он, видимо, ставит запятые вместо точек.
 
Цитата
Almera написал: У меня теперь работает как я и хотела.
Вместо любой цифры впишите точку, пробел или запятую...

Цитата
Он, видимо, ставит запятые вместо точек
Да. Если у Вас разделитель - точка, уберите замену:
=И(--ЛЕВБ(A2;ПОИСК(", ";A2)-1);
     --ПСТР(A2;ПОИСК(", ";A2)+2;20);
     ДЛСТР(ПОДСТАВИТЬ(A2;" ";))=ДЛСТР(A2)-1)
Страницы: 1
Наверх