Страницы: 1 2 След.
RSS
Последовательность ввода данных в ячейку (номер дома в формате "1111а/111б")
 
Здравствуйте!  
 
Как задать последовательность/порядок ввода номера дома/строения в ячейку? Порядок таков, разрешено: до четырех цифр, затем буква (русский алфавит "а-я"), далее правый слэш "/", затем три цифры и одна буква (так же "а-я") - "1111а/111б".
 
формат ячейки - текстовый и вводите
 
{quote}{login=}{date=10.01.2012 11:53}{thema=}{post}формат ячейки - текстовый и вводите{/post}{/quote}  
 
Это я и сам знаю) Надо так, чтобы "дурная голова" перед цифрами не писала буквы и, чтобы цифр до слэша было не более четырех, после слэша - не более трех + по одной букве, а не по 20
 
Меню Данные-Проверка_данных-Тип_данных-Другой, формула:  
=И(ЕЧИСЛО(ЛЕВСИМВ($A$1;4)+ПСТР($A$1;7;3));(ПСТР($A$1;6;1)="/");КОДСИМВ(ПСТР($A$1;5;1))>223;КОДСИМВ(ПСТР($A$1;10;1))>223)
 
Спасибо, но что-то не получается... Возникает ошибка, пишет. У меня данная формула предусматривается в ячейке H2. Пробовал и в А1, все равно возникает ошибка при вычислении.
 
Формула вставляется в Проверку_данных той ячейки, на которую ставится ограничение. Ссылки в формуле тоже должны вести на эту ячецку.
 
Вить у меня тоже пищит..., но лезет :)  
Правда отрабатывает по конкретной маске ????*/???*, а вот такое ??*/???* например уже не введешь.  
P.S. С назначением тебя!
 
Спасибо.  
А то, что другое не влезает - как и требовалось, по конкретной маске.
 
Не, автор сказал "цифр до слэша должно быть не более 4" значит может быть менее :)  
Формулу я накалякал только в проверке данных она не отрабатывает :((только на листе) Подумаю еще...
 
{quote}{login=kim}{date=12.01.2012 09:11}{thema=}{post}Не, автор сказал "цифр до слэша должно быть не более 4" значит может быть менее :)  
Формулу я накалякал только в проверке данных она не отрабатывает :((только на листе) Подумаю еще...{/post}{/quote}  
 
Да, не все так просто в реализации оказалось, как хотелось бы. Но все равно, спасибо!
 
Saeglopur, Вы бы лучше сказали, прав я или нет? Или существует определенная жесткая маска данных (по количеству символов)?
 
{quote}{login=kim}{date=12.01.2012 09:27}{thema=}{post}Saeglopur, Вы бы лучше сказали, прав я или нет? Или существует определенная жесткая маска данных (по количеству символов)?{/post}{/quote}  
 
Нет, Вы правильно заметили, что жесткая маска отсутствует. Это же номер дома, он может быть любым в указанных пределах - от 1в до 1132а/102б
 
Попробуйте что-нибудь ввести в желтом диапазоне...
 
{quote}{login=kim}{date=12.01.2012 09:45}{thema=}{post}Попробуйте что-нибудь ввести в желтом диапазоне...{/post}{/quote}  
 
Поразительно! Вы близки к цели! Но есть маленькие неточности - не проходят следующие случаи ввода данных:  
11/1  
11/11  
111/111  
1111/1  
1111/11  
1111/111  
1111а/1  
1111/1а  
и подобные им.    
А, например, 1111а/11а или 11а/1б проходит.  
 
Посмотрите еще, пожалуйста, если есть время на это.
 
Минутку! А разве запись 11/1 соответствует заявленному в стартовом сообщении?
 
А почему нет? Там же написано - "разрешено", то есть разрешено до 4-х цифр и одна буква до слэша и до 3-х цифр и одна буква после слэша
 
Нет уж: "разрешено: до четырех цифр, затем буква..." Не оговорено, что буквы может и не быть. Если бы сразу сформулировали чётко, то и решение давно бы получили. Если для Вас это очевидно, то для других нет.
 
Юрий прав, нужно как можно точнее формулировать условия. Формулу так изначально и планировал.  
Пробуйте (проверял не все варианты)...
 
Вы правы, ребята, я не совсем точно написал условие. Впредь Ваши замечания учту.  
Уважаемый Kim, Вы сделали почти все так, как надо, кроме следующего: не проходят значения, где перед слэшем всего одна или две цифры, и одна или две после него. Значения вида 1/111, 11/111а, 11а/1 работают.  
Спасибо.
 
И как это сделать в своем файле? ) Столбец B скрыт...
 
В столбце В формула, надеюсь Вы найдете в своем файле пустующий столбец.  
Поправил.
 
Вы волшебник, Kim) Впрочем, как и все эксперты данного портала! Кланяюсь перед Вами!
 
Уважаемый Kim, все сейчас заметил, что не работает ввод номера 1, 2, 10 и т.д.  
Не могли бы поправить?
 
VBA вариант с использованием регулярных выражений и условного форматирования.  
Для вариантов 3 и 4:  
 
1. Число от 1 до 9999  
2. Число от 1 до 9999 и РусскаяБуква  
3. Число от 1 до 9999 и РусскаяБуква и символ / c числом от 1 до 999  
4. Число от 1 до 9999 и РусскаяБуква и символ / c числом от 1 до 999 и РусскаяБуква
 
Здравствуйте, ZVI! Спасибо. Идея хороша и работает, но ее бы доработать, чтобы Excel выдавал ошибку и не пропускал значения, которые не соответствуют заданным условиям.
 
Так?
 
Именно! У вас талант! Только как мне ее привинтить к своему файлу?
 
Вставил разработанный Вами макрос в свой код, так же создал модуль 1 и вставил в него Ваш код. Если оставляю один Ваш макрос без моих, то все работает, только функция ErrStreetNum=() в диспетчере имен не показывает выделенную ячейку.  
Вот общий код, подскажите что не так, пожалуйста:  
 
Private Sub Worksheet_Change(ByVal Target As Range)  
If Target.Address = [Ãîðîä].Address Then [Ðàéîí] = "": Exit Sub
       
Dim Rng As Range, x As Range, v$  
 Set Rng = Intersect(Target, Range("H2:H1001"))  
   If Rng Is Nothing Then Exit Sub  
   On Error GoTo exit_  
   Application.EnableEvents = False  
   For Each x In Rng  
   With x  
     If ErrStreetNum(.Value) Then  
       .Select  
       MsgBox "Ïðèìåðû ïðàâèëüíûõ íîìåðîâ óëèö:" & vbLf & vbLf & "1234" & vbLf & "1234á" & vbLf & "1234á/567" & vbLf & "1234á/567ã", vbCritical, "Îøèáêà ââîäà!"  
       v = .Value  
       Application.Undo  
       Application.SendKeys v & "{F2}", True  
     End If  
   End With  
 Next  
exit_:  
 Application.CutCopyMode = False  
 Application.EnableEvents = True  
 If Err Then MsgBox Err.Description, vbCritical, "Îøèáêà"  
 Exit Sub  
             
   If Target.Cells.Count > 1 Then Exit Sub  
       If Not Intersect(Target, Range("B2:B1001")) Is Nothing Then  
       If Target = "" Then  
           With Target.Offset(0, 1).Validation  
               .Delete  
           End With  
           Target.Offset(0, 1).ClearContents  
       Else  
           With Target.Offset(0, 1).Validation  
               .Delete  
               .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _  
               xlBetween, Formula1:="=$AT$2:$AT$11"  
               .IgnoreBlank = True  
               .InCellDropdown = True  
               .InputTitle = ""  
               .ErrorTitle = ""  
               .InputMessage = ""  
               .ErrorMessage = ""  
               .ShowInput = True  
               .ShowError = True  
           End With  
       End If  
   End If  
     
   If Intersect(Target, Range("B2:B1001")) Is Nothing Then Exit Sub  
         On Error GoTo exit_  
            With Sheets("Table_MSSQL")  
               If .Cells(Target.Row, "E") <> "" Then  
               Application.EnableEvents = False  
               .Cells(Target.Row, "C").Value = Now  
               .Cells(Target.Row, "C").EntireColumn.AutoFit  
               Else  
               .Cells(Target.Row, "C").Value = Empty  
      End If  
  End With  
exit_:  
Application.EnableEvents = True  
  Exit Sub  
       
   On Error Resume Next  
   If Target.Value = x Then Exit Sub  
   Select Case Target(1, 1).Address  
   Case [Êîë.êîì.îò2].Address: [Êîë.êîì.äî2].Value = ""
   End Select  
     
End Sub
 
{quote}{login=Saeglopur}{date=17.01.2012 01:41}{thema=Re:}{post}Вставил разработанный Вами макрос в свой код, так же создал модуль 1 и вставил в него Ваш код. Если оставляю один Ваш макрос без моих, то все работает, только функция ErrStreetNum=() в диспетчере имен не показывает выделенную ячейку.  
Вот общий код, подскажите что не так, пожалуйста:{/post}{/quote}  
1. "создал модуль 1 и вставил в него Ваш код"  
 
В Module1 должен быть код из Module1 моего примера, а остальной код должен быть в модуле листа.  
 
2. "функция ErrStreetNum=() в диспетчере имен не показывает выделенную ячейку."  
 
Она не должна. В моем примере имена X и Y отладочные - удалите их    
 
3. "Вот общий код, подскажите что не так, пожалуйста:"  
 
После этого фрагмента:  
If Err Then MsgBox Err.Description, vbCritical, "Ошибка"  
Exit Sub  
ни одна строка кода ниже не будет выполняться, потому что Exit Sub  
 
Остальное прокомментировать не могу, потому что не знаю, что на каких листах, что означают именованные дипазоны, что находится по смещениям и что должен делать остальной Ваш код.    
 
Обратите также внимание на кракозябры в опубликованном Вами коде, чтобы их не было, переключайте клавиатуру на русский перед копированием.
 
Спасибо, ZVI. Где найти Ваши контакты для личного разговора?
Страницы: 1 2 След.
Читают тему
Наверх