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

Вход

Регистрация

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

 

= Мир MS Excel/Моментальное исправление "кривых" дат. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Моментальное исправление "кривых" дат. (Макросы/Sub)
Моментальное исправление "кривых" дат.
vitos88 Дата: Четверг, 28.09.2017, 16:01 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 97
Репутация: 5 ±
Замечаний: 0% ±

У всех пользователей excel, за малым исключением, бывали случаи некорректного ввода даты в ячейки. Предлагаю подумать, каким образом, используя скрипты, можно добиться исправления кривой даты после её ввода в ячейку.

Навеяно темой "Обработка "кривых" дат"
 
Ответить
СообщениеУ всех пользователей excel, за малым исключением, бывали случаи некорректного ввода даты в ячейки. Предлагаю подумать, каким образом, используя скрипты, можно добиться исправления кривой даты после её ввода в ячейку.

Навеяно темой "Обработка "кривых" дат"

Автор - vitos88
Дата добавления - 28.09.2017 в 16:01
sboy Дата: Четверг, 28.09.2017, 16:11 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Обработка исходных данных,это одна задача.
А вот это
добиться исправления кривой даты после её ввода в ячейку
можно просто не допускать.
К сообщению приложен файл: 5824099.jpg (33.5 Kb)


Яндекс: 410016850021169
 
Ответить
СообщениеОбработка исходных данных,это одна задача.
А вот это
добиться исправления кривой даты после её ввода в ячейку
можно просто не допускать.

Автор - sboy
Дата добавления - 28.09.2017 в 16:11
vitos88 Дата: Пятница, 29.09.2017, 08:17 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 97
Репутация: 5 ±
Замечаний: 0% ±

Можно и не допускать, не спорю, но задача немного в другом, а именно в облегчении ввода данных. Чтобы не перепечатывать неправильные даты.
 
Ответить
СообщениеМожно и не допускать, не спорю, но задача немного в другом, а именно в облегчении ввода данных. Чтобы не перепечатывать неправильные даты.

Автор - vitos88
Дата добавления - 29.09.2017 в 08:17
buchlotnik Дата: Пятница, 29.09.2017, 08:58 | Сообщение № 4
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Цитата
Чтобы не перепечатывать
ОК, как, например, интерпретировать 123/0011/2017? 12 или 23? января или ноября? Чем пытаться обработать "рукожо...", проще и логичнее его не допускать, о чём Сергей уже написал.
 
Ответить
Сообщение
Цитата
Чтобы не перепечатывать
ОК, как, например, интерпретировать 123/0011/2017? 12 или 23? января или ноября? Чем пытаться обработать "рукожо...", проще и логичнее его не допускать, о чём Сергей уже написал.

Автор - buchlotnik
Дата добавления - 29.09.2017 в 08:58
vitos88 Дата: Пятница, 29.09.2017, 10:11 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 97
Репутация: 5 ±
Замечаний: 0% ±

Если не удаётся распознать дату из предложенных вариантов кривых, то писать "нет даты" или "дата не найдена".
 
Ответить
СообщениеЕсли не удаётся распознать дату из предложенных вариантов кривых, то писать "нет даты" или "дата не найдена".

Автор - vitos88
Дата добавления - 29.09.2017 в 10:11
vitos88 Дата: Пятница, 29.09.2017, 13:03 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 97
Репутация: 5 ±
Замечаний: 0% ±

Или вот такая задача: Макрос для автоматической замены "," на "."
например, если введен текст 22,07,2014 то он автоматически переводит его в дату 22.07.2014
 
Ответить
СообщениеИли вот такая задача: Макрос для автоматической замены "," на "."
например, если введен текст 22,07,2014 то он автоматически переводит его в дату 22.07.2014

Автор - vitos88
Дата добавления - 29.09.2017 в 13:03
buchlotnik Дата: Пятница, 29.09.2017, 13:48 | Сообщение № 7
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Примотал из той темы
[vba]
Код
Private Function gooddate(t)
    Application.Volatile
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "\D+"
        gooddate = .Replace(t, "")
        If Len(gooddate) < 6 Or Len(gooddate) > 8 Then gooddate = "дата не найдена": Exit Function
        .Pattern = "(\d{2})(\d{2})(19|20|\d{0})(\d{2})"
        gooddate = CDate(.Replace(gooddate, "$1.$2.$4"))
    End With
End Function

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect([дата], Target) Is Nothing Then
        Application.EnableEvents = False
        Target = gooddate(Target)
        Application.EnableEvents = True
    End If
End Sub
[/vba]
К сообщению приложен файл: gooddate2.xlsm (16.6 Kb)


Сообщение отредактировал buchlotnik - Пятница, 29.09.2017, 13:52
 
Ответить
СообщениеПримотал из той темы
[vba]
Код
Private Function gooddate(t)
    Application.Volatile
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "\D+"
        gooddate = .Replace(t, "")
        If Len(gooddate) < 6 Or Len(gooddate) > 8 Then gooddate = "дата не найдена": Exit Function
        .Pattern = "(\d{2})(\d{2})(19|20|\d{0})(\d{2})"
        gooddate = CDate(.Replace(gooddate, "$1.$2.$4"))
    End With
End Function

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect([дата], Target) Is Nothing Then
        Application.EnableEvents = False
        Target = gooddate(Target)
        Application.EnableEvents = True
    End If
End Sub
[/vba]

Автор - buchlotnik
Дата добавления - 29.09.2017 в 13:48
vitos88 Дата: Пятница, 29.09.2017, 15:46 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 97
Репутация: 5 ±
Замечаний: 0% ±

buchlotnik, Просто восхитительно! Это решение обязательно кому-то пригодится в будущем!

Как сделать так, чтобы это правило распространялось на весь определённый столбец?


Сообщение отредактировал vitos88 - Пятница, 29.09.2017, 15:50
 
Ответить
Сообщениеbuchlotnik, Просто восхитительно! Это решение обязательно кому-то пригодится в будущем!

Как сделать так, чтобы это правило распространялось на весь определённый столбец?

Автор - vitos88
Дата добавления - 29.09.2017 в 15:46
buchlotnik Дата: Пятница, 29.09.2017, 16:46 | Сообщение № 9
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Цитата
на весь определённый столбец
поменяйте в диспетчере имён диапазон дата на
Код
=Лист1!$A:$A
 
Ответить
Сообщение
Цитата
на весь определённый столбец
поменяйте в диспетчере имён диапазон дата на
Код
=Лист1!$A:$A

Автор - buchlotnik
Дата добавления - 29.09.2017 в 16:46
vitos88 Дата: Пятница, 06.10.2017, 15:49 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 97
Репутация: 5 ±
Замечаний: 0% ±

buchlotnik, не работает.
 
Ответить
Сообщениеbuchlotnik, не работает.

Автор - vitos88
Дата добавления - 06.10.2017 в 15:49
buchlotnik Дата: Пятница, 06.10.2017, 15:55 | Сообщение № 11
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Что не работает? Где файл в котором не работает? Как не работает?


Сообщение отредактировал buchlotnik - Пятница, 06.10.2017, 15:56
 
Ответить
СообщениеЧто не работает? Где файл в котором не работает? Как не работает?

Автор - buchlotnik
Дата добавления - 06.10.2017 в 15:55
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Моментальное исправление "кривых" дат. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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