Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Ограничение по вводу данных в ячейку - только дата или текст - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Ограничение по вводу данных в ячейку - только дата или текст
KIMVSR Дата: Среда, 16.03.2016, 11:01 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 118
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте, ребят.

Подскажите, пожалуйста, как можно ограничить ввод данных в ячейку посредством Data Validation, чтобы вводить можно было либо дату в формате dd.mm.yyyy, либо текст (в моём случае, буква "x"). Раньше я делал это через скрипт:

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("K6:X999")) Is Nothing Then
        Application.EnableEvents = False
        If Target.Value <> "" And Target.Value <> "x" And Not IsDate(Target.Value) Then
            MsgBox "Only 'DATE' or 'X' value are allowed to input!", vbCritical
            Target.ClearContents
        ElseIf IsDate(Target.Value) Then
            Target.Value = DateValue(Format(Target, "dd.mm.yyyy"))
        End If
        Application.EnableEvents = True
        Range("K6:X9999").HorizontalAlignment = xlRight
    End If
End Sub
[/vba]
Но этот код довольно часто глючит по непонятным мне причинам, выкидывает "debug error", после чего приходится перезагружать файл для восстановления работы скрипта.

Скажите, пожалуйста, может это как-то возможно осуществить НЕ через VBA, а через Data Validation (Custom) ?

Заранее больше спасибо!


Сообщение отредактировал KIMVSR - Среда, 16.03.2016, 11:02
 
Ответить
СообщениеЗдравствуйте, ребят.

Подскажите, пожалуйста, как можно ограничить ввод данных в ячейку посредством Data Validation, чтобы вводить можно было либо дату в формате dd.mm.yyyy, либо текст (в моём случае, буква "x"). Раньше я делал это через скрипт:

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("K6:X999")) Is Nothing Then
        Application.EnableEvents = False
        If Target.Value <> "" And Target.Value <> "x" And Not IsDate(Target.Value) Then
            MsgBox "Only 'DATE' or 'X' value are allowed to input!", vbCritical
            Target.ClearContents
        ElseIf IsDate(Target.Value) Then
            Target.Value = DateValue(Format(Target, "dd.mm.yyyy"))
        End If
        Application.EnableEvents = True
        Range("K6:X9999").HorizontalAlignment = xlRight
    End If
End Sub
[/vba]
Но этот код довольно часто глючит по непонятным мне причинам, выкидывает "debug error", после чего приходится перезагружать файл для восстановления работы скрипта.

Скажите, пожалуйста, может это как-то возможно осуществить НЕ через VBA, а через Data Validation (Custom) ?

Заранее больше спасибо!

Автор - KIMVSR
Дата добавления - 16.03.2016 в 11:01
MacSieM Дата: Среда, 16.03.2016, 11:15 | Сообщение № 2
Группа: Проверенные
Ранг: Участник
Сообщений: 84
Репутация: 18 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте.

Попробуйте что-нибудь подобное в проверку данных поместить (для ячейки A4 в данном случае):
Код
=ИЛИ(И(ЕЧИСЛО(A4);A4>=ДАТА(2000;1;1));СТРОЧН(A4)="x")


В данном случае есть проверка на минимальную дату (1 января 2000). Можете ее удалить, изменить или дополнить границей сверху, если необходимо.
"х" - латинская, без учета регистра.

PS: формат ввода не проверяется, разумеется. Это ложится на плечи формата ячейки. Однако, если Эксель не распознает введенный текст как дату в необходимом диапазоне (или как "x"), то Вы получите предупреждение.


Сообщение отредактировал MacSieM - Среда, 16.03.2016, 11:17
 
Ответить
СообщениеЗдравствуйте.

Попробуйте что-нибудь подобное в проверку данных поместить (для ячейки A4 в данном случае):
Код
=ИЛИ(И(ЕЧИСЛО(A4);A4>=ДАТА(2000;1;1));СТРОЧН(A4)="x")


В данном случае есть проверка на минимальную дату (1 января 2000). Можете ее удалить, изменить или дополнить границей сверху, если необходимо.
"х" - латинская, без учета регистра.

PS: формат ввода не проверяется, разумеется. Это ложится на плечи формата ячейки. Однако, если Эксель не распознает введенный текст как дату в необходимом диапазоне (или как "x"), то Вы получите предупреждение.

Автор - MacSieM
Дата добавления - 16.03.2016 в 11:15
krosav4ig Дата: Среда, 16.03.2016, 17:30 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
еще вариант формулы для проверки данных
Код
=ИЛИ(A1="x";И(1-ЕОШ(ДАТАЗНАЧ(ТЕКСТ(A1;"Д.М.Г")));ИЛИ(ЯЧЕЙКА("формат";A1)="d"&СТРОКА($1:$5))))


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениееще вариант формулы для проверки данных
Код
=ИЛИ(A1="x";И(1-ЕОШ(ДАТАЗНАЧ(ТЕКСТ(A1;"Д.М.Г")));ИЛИ(ЯЧЕЙКА("формат";A1)="d"&СТРОКА($1:$5))))

Автор - krosav4ig
Дата добавления - 16.03.2016 в 17:30
KIMVSR Дата: Пятница, 18.03.2016, 12:19 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 118
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
MacSieM, krosav4ig, ребят, большое спасибо! Всё отлично работает! Именно то, что надо! :hands:
_Boroda_, только что понял, почему была ошибка: я неправильно указывал диапазон действия формулы. Поправил диапазон и ошибка перестала вылетать. Если опять вылетит - сделаю скриншот и выложу его сюда. Просто я применяю эту формулу на разных листах и на одном из листов была опечатка диапазоне, поэтому именно на том листе и вылетала ошибка. А теперь я поправил и вроде как стало нормально. Спасибо!


Сообщение отредактировал KIMVSR - Пятница, 18.03.2016, 12:28
 
Ответить
СообщениеMacSieM, krosav4ig, ребят, большое спасибо! Всё отлично работает! Именно то, что надо! :hands:
_Boroda_, только что понял, почему была ошибка: я неправильно указывал диапазон действия формулы. Поправил диапазон и ошибка перестала вылетать. Если опять вылетит - сделаю скриншот и выложу его сюда. Просто я применяю эту формулу на разных листах и на одном из листов была опечатка диапазоне, поэтому именно на том листе и вылетала ошибка. А теперь я поправил и вроде как стало нормально. Спасибо!

Автор - KIMVSR
Дата добавления - 18.03.2016 в 12:19
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!