Страницы: 1
RSS
Дата из текста
 
Эксперты! Подскажите пожалуйста, как написать формулу, чтобы из текста выбрать исключительно дату.
Заявка   716694 от 31.10.2014 12:04:59
Заявка 0000022453 от   28.12.2015 12:02:43
Заявка 942774 от 04.09.2015   0:00:00
 
Пример в файле, с десяток строк, близких к реальности.
Для ваших трех строк:
=ЛЕВСИМВ(ПРАВСИМВ(A1;19);10)
 
UDF:
Код
Function GetDate(cell)
    With CreateObject("VBScript.RegExp")
        .Pattern = "\d{2}\.\d{2}\.\d{4}": GetDate = .Execute(cell)(0)
    End With
End Function
 
Михаил С., Особливо на третьей строке формула хорошо работает.
 
=ЕСЛИ(ЕОШ(ПОИСК("??.??.????";A1));"";ПСТР(A1;ПОИСК("??.??.????";A1);10))
Конечно, есть косяк: если в строке будет текст вида: "Вн.ст.прибор" в различных вариациях - уже не прокатит, нужно добавлять проверку на числа. Делать пока не охота хотя бы потому, что неизвестно какие вообще могут быть варианты текста, кроме приведенных.

Все же выложу - возвращает реальную дату, если она есть в тексте:
=ЕСЛИ(ЕОШ(ПОИСК("??.??.????";A1));"";ЕСЛИ(ЕОШ(ДАТАЗНАЧ(ПСТР(A1;ПОИСК("??.??.????";A1);10)));"";ДАТАЗНАЧ(ПСТР(A1;ПОИСК("??.??.????";A1);10))))
Изменено: The_Prist - 06.07.2016 19:36:35
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Еще вариант если текст в А1. Дата без времени
Код
=ЦЕЛОЕ(ПСТР(A1;ПОИСК("от";A1;1)+3;99))
Дата и время
Код
=ПСТР(A1;ПОИСК("от";A1;1)+3;99)
 
Rayman, поэтому и сказал - реальные данный в файле.
 
Спасибо!  
 
Цитата
Михаил С. написал: поэтому и сказал - реальные данный в файле.
В каком файле? :)
 
В файле, который должен был показать ТС :)
 
еще три варианта функций yyy в столбце B,zzz в D и www в F

 
Код
Function zzz$(t$)
 zzz = Mid(t, InStrRev(t, ".") - 5, 3) & Mid(t, InStrRev(t, ".") - 2, 3) & Mid(t, InStrRev(t, ".") + 1, 4)
End Function
Код
Function yyy$(t$)
 With CreateObject("VBScript.RegExp"):  .Pattern = "\d+\.\d+.\d+"
   If .test(t) Then yyy = .Execute(t)(0) Else yyy = ""
 End With
End Function
Код
Function www$(t$)
 With CreateObject("VBScript.RegExp"):  .Pattern = "(?:0[1-9]|[1-2]\d|3[0-1])\.(?:0[1-9]|[1-2]\d)\.20\d\d"
    If .test(t) Then www = .Execute(t)(0) Else www = ""
 End With
End Function
Изменено: sv2013 - 06.07.2016 23:41:09
 
добавил еще одну функцию vvv в столбец H

 
Код
Function vvv$(t$)
 vvv = Split(Split(t, ".")(0))(UBound(Split(Split(t, ".")(0)))) & "." & Split(t, ".")(1) & "." & Split(Split(t, ".")(2))(0)
End Function
Изменено: sv2013 - 07.07.2016 00:54:17
 
Еще вариант: аналог VBA.Split() на формулах
Разделитель задаётся в желтой ячейке
Формулы растягиваются, в примере на 10 разделителей
Можно добавить сюда http://www.planetaexcel.ru/techniques/7/101/ - там нет формульного варианта
Изменено: KUDRIN - 19.12.2016 17:41:39
Страницы: 1
Наверх