Страницы: 1
RSS
Как выдернуть дату из текста
 
Здравствуйте! Есть таблица, в ячейках указаны фамилии, напротив некоторых фамилий даты. Единого образца записи нет, по этому пишутся через пень-колоду. Нужно выдернуть из текста последнюю дату. т.е. если записано Иванов М.М. 23.03-30.03, то нужно выдернуть 30.03.
В идеале нужна подсветка фамилии, если дата на два дня больше или меньше текущей даты. Можно ли это реализовать без макросов?
 
Sof07,
Код
=ПСТР(B8;ПОИСК("-";B8;1)+1;5)
Не бойтесь совершенства. Вам его не достичь.
 
Sof07, Один вопрос, одна тема.
 
только фамилию не подсветить и формула чувствительна к региональным
=ABS(RIGHT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B7;")";);"-";" ");" ";"     ");5)-TODAY())>1
Изменено: БМВ - 10.08.2021 20:22:01
По вопросам из тем форума, личку не читаю.
 
Можно дополнительно учесть дни, записанные одной цифрой:
Код
=ABS(СЖПРОБЕЛЫ(ПРАВСИМВ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(B7;")"; );"-";" ");" ";"     ");5))-СЕГОДНЯ())>1
Владимир
 
sokol92, владимир, 5 у меня означает что максимум 2 знака на число 2 на месяц и один на разделитель. А не строго 5 символов. Но вот сейчас вижу что триммер убрал зря, не проверил и по привычке что просто число с пробелом без проблем преобразуется.
=ABS(TRIM(RIGHT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B8;")";);"-";" ");" ";"     ");5))-TODAY())>1
Изменено: БМВ - 10.08.2021 20:23:41
По вопросам из тем форума, личку не читаю.
 
Mershik,Спасибо! Почти то, но не работает если после фамилии только одна дата

БМВ,А тут почему то подсвечиваются фамилии у которых даты далеко от сегодняшней
 
Sof07, какой пример привели -такое решение предложил.
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Sof07 написал:
если дата на два дня больше или меньше текущей даты
ну если строго на 2 дня, то
=ABS(TRIM(RIGHT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B8;")";);"-";" ");" ";"     ");5))-TODAY())=2
По вопросам из тем форума, личку не читаю.
 
Цитата
выдернуть из текста последнюю дату. т.е. если записано Иванов М.М. 23.03-30.03, то нужно выдернуть 30.03.
Код
Function iDate(cell$)
Dim mo As Object
 With CreateObject("VBScript.RegExp")
     .Global = True
     .Pattern = "(([0-2]?\d|[3][0,1])\.[0,1]?\d)\-?(([0-2]?\d|[3][0,1])\.[0,1]?\d)?"
   If .test(cell) Then
     If InStr(1, cell, "-") > 0 Then
'       iDate = .Execute(cell)(0)                   'до тире и после тире
'       iDate = .Execute(cell)(0).SubMatches(0)     'дата до тире
       iDate = .Execute(cell)(0).SubMatches(2)     'дата после тире
     Else
       iDate = .Execute(cell)(0)
     End If
   Else
     iDate = ""
   End If
 End With
End Function
Страницы: 1
Наверх