Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2014, 17:58   #1
cybernetic
Новичок
Джуниор
 
Регистрация: 31.01.2014
Сообщений: 3
По умолчанию Извлечь дату из текста

Господа, возникла задача извлечь из текста, забитого в экселвскую ячейку, дату
Текст в ячейках достаточно произвольный, содержит помимо дат еще и цифры, но даты везде в формате дд.мм.гггг. Например " иацшлдсмилы 13.01.2010 млош 375 иа 9799" - необходимо получить 13.01.2010

Исходя из здравого смысла (если он бывает у гуманитария), я полагаю, что надо сделать так, чтобы макрос брал строку и шел по ней, проверяя нет ли там сочетания хх.хх.хххх, где х это цифры. Но самому написать такое как-то не получилось.

Не подскажете, как можно решить эту задачу?
Спасибо!
cybernetic вне форума Ответить с цитированием
Старый 01.02.2014, 18:11   #2
cybernetic
Новичок
Джуниор
 
Регистрация: 31.01.2014
Сообщений: 3
По умолчанию

Function get_data(a As String)
Dim s As String
For i = 1 To Len(a)
If (IsNumeric(a(i)) And IsNumeric(a(i + 1)) And a(i + 2) = "." And IsNumeric(a(i + 3)) And IsNumeric(a(i + 4)) And a(i + 5) = "." And IsNumeric(a(i + 6)) And IsNumeric(a(i + 7)) And IsNumeric(a(i + 8)) And IsNumeric(a(i + 9))) Then
s = a(i) & a(i + 1) & a(i + 2) & a(i + 3) & a(i + 4) & a(i + 5) & a(i + 6) & a(i + 7) & a(i + 8) & a(i + 9)
Exit For
End If
Next i
get_data = s
End Function

Он ругается что a не массив. Нельзя так ссылаться на элемент строки?
cybernetic вне форума Ответить с цитированием
Старый 01.02.2014, 18:31   #3
cybernetic
Новичок
Джуниор
 
Регистрация: 31.01.2014
Сообщений: 3
По умолчанию

Хотя я уже разобрался - нашел функцию Mid()

Но проблема в том, что есть места, где месяц прописан прописью - вот тут мне уже самому не справиться, буду благодарен за подсказки
cybernetic вне форума Ответить с цитированием
Старый 01.02.2014, 18:54   #4
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

Но проблема в том, что есть места, где месяц прописан прописью

привидите пример
maksim_serg вне форума Ответить с цитированием
Старый 01.02.2014, 20:59   #5
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Для формата дд.мм.гггг. Формат ячейки с функцией - дата.
Код:
Dim re As Object

Function GetDate(s As String)
If re Is Nothing Then
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "\d\d.\d\d.\d\d\d\d"
End If
GetDate = CDate(re.Execute(s)(0))
End Function
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 01.02.2014 в 21:02.
Казанский вне форума Ответить с цитированием
Старый 01.02.2014, 21:34   #6
Czeslaw
Пользователь
 
Регистрация: 08.07.2013
Сообщений: 95
По умолчанию

Можно и с формулой
=MID(A1;SEARCH(".";A1)-2;10)
Czeslaw вне форума Ответить с цитированием
Старый 02.02.2014, 07:03   #7
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Вариант:
Код:
Dim re As Object

Function GetDate(s As String)
    On Error GoTo GetDate_Error
    GetDate = CDate(re.Execute(s)(0))
    On Error GoTo 0
    Exit Function
GetDate_Error:
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "(\d\d.){2}\d{4}"
    Resume
End Function
P.S. Czeslaw, а если точка встретится раньше по тексту?
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 02.02.2014, 14:28   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

тема регулярных выражений неисчерпаема... ни в глубь ни в ширь
я использую такой шаблон для поиска дат:
Код:
"\d+( |.)([яфмаисонд](([а-я]{2}\.? )|([а-я]+[а|я] ))\d{4})|(\d+( |.)\d+)"
Код:
Function GetDate(t As String) As String
  Dim re As Object
  Set re = CreateObject("vbscript.regexp")
re.Pattern = "\d+( |.)([яфмаисонд](([а-я]{2}\.? )|([а-я]+[а|я] ))\d{4})|(\d+( |.)\d+)"
  If re.test(t) Then GetDate = re.Execute(t)(0)
  Set re = Nothing
End Function
задача не столько не собирать мусор, сколько не пропустить дату.
ловит даты в формате:
ДД.ММ.ГГГГ (с разными разделителями, день и месяц могут содержать 1 цифру, год 2 или 4)
даты записанные с месяцем в текстовом формате:
из 3-х букв (с точкой или без нее в конце)
1 дек. 2013
или с полным названием месяца в родительном падеже
27 августа 2012


PS:
приветсвуются конструктивные критические замечания по шаблону
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 02.02.2014 в 14:32.
IgorGO вне форума Ответить с цитированием
Старый 20.02.2014, 09:46   #9
merchant-ru
Новичок
Джуниор
 
Регистрация: 20.02.2014
Сообщений: 1
По умолчанию

Добрый день!
Подскажите, если у меня есть список "утверждающих документов", то как из этой строки можно извлечь (в каждую отдельную ячейку): наименование документа, дату и номер? (пример во вложении)
Вложения
Тип файла: rar utv-doc.rar (7.0 Кб, 18 просмотров)

Последний раз редактировалось merchant-ru; 20.02.2014 в 09:51.
merchant-ru вне форума Ответить с цитированием
Старый 20.02.2014, 10:30   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

см.вложение
Вложения
Тип файла: rar utv-doc.rar (7.5 Кб, 68 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Извлечь дату съемки из Jpeg файла (EXIF) ArtZ91 Мультимедиа в Delphi 12 13.10.2013 11:08
Преобразование текста в ячейке в дату LGM Microsoft Office Excel 5 10.07.2013 16:53
парсинг текста, вытащить дату HellMercenariess Общие вопросы Delphi 5 27.07.2012 16:07
Отмена преобразования текста в дату yursanch Microsoft Office Excel 5 14.01.2011 13:09
Выделить дату и номер договора из текста S_M Microsoft Office Excel 6 04.09.2009 17:46