Уважаемые господа! Посмотрел 11 страниц форума по интересующей меня информации и не нашел подходящего решения! К сожалению, само собой) Поэтому со спокойной душой прошу о помощи. Так вот, подскажите пожалуйста как решить небольшую задачу, имеется ячейка с расположенными в ней датами одна под другой, нужно вычленить последнюю дату, отображенную в ячейке. Сам хотел через правсимвол сделать, но столкнулся с проблемой, что в некоторых ячейках есть текст в конце ячейки, как это сделать? пример ниже. Спасибо!!
Уважаемые господа! Посмотрел 11 страниц форума по интересующей меня информации и не нашел подходящего решения! К сожалению, само собой) Поэтому со спокойной душой прошу о помощи. Так вот, подскажите пожалуйста как решить небольшую задачу, имеется ячейка с расположенными в ней датами одна под другой, нужно вычленить последнюю дату, отображенную в ячейке. Сам хотел через правсимвол сделать, но столкнулся с проблемой, что в некоторых ячейках есть текст в конце ячейки, как это сделать? пример ниже. Спасибо!!Volkofx
СТРОКА(A42000)=42000 или 27.12.14, а 43000 - это 22.09.2017. В формуле перебираются все даты из этого диапазона и кусок ЕЧИСЛО(ПОИСК(...) возвращает есть ли такая дата в ячейке или нет. Полученный результат (0 или 1) умножается на искомую дату.
Volkofx, это даты, которые Вы ищете в ячейках.
СТРОКА(A42000)=42000 или 27.12.14, а 43000 - это 22.09.2017. В формуле перебираются все даты из этого диапазона и кусок ЕЧИСЛО(ПОИСК(...) возвращает есть ли такая дата в ячейке или нет. Полученный результат (0 или 1) умножается на искомую дату.Manyasha
СТРОКА(A42000)=42000 или 27.12.14, а 43000 - это 22.09.2017. В формуле перебираются все даты из этого диапазона и кусок ЕЧИСЛО(ПОИСК(...) возвращает есть ли такая дата в ячейке или нет. Полученный результат (0 или 1) умножается на искомую дату.
Спасибо, это понял и даже разобрался)
Но в целом возникла другая проблема вычленения дат, если ниже под датами много текста, то пишет 1900 год и тп. Если текст вручную убрать, то показывает нужную дату. если есть какие-то идеи, подскажите (Эта просьба всем участникам форума )
СТРОКА(A42000)=42000 или 27.12.14, а 43000 - это 22.09.2017. В формуле перебираются все даты из этого диапазона и кусок ЕЧИСЛО(ПОИСК(...) возвращает есть ли такая дата в ячейке или нет. Полученный результат (0 или 1) умножается на искомую дату.
Спасибо, это понял и даже разобрался)
Но в целом возникла другая проблема вычленения дат, если ниже под датами много текста, то пишет 1900 год и тп. Если текст вручную убрать, то показывает нужную дату. если есть какие-то идеи, подскажите (Эта просьба всем участникам форума )Volkofx
Формула работает, если длина текста в ячейке меньше 255 символов. Если даты всегда в начале, то можно просто взять первые 255 символов, остальное обрезать
Формула работает, если длина текста в ячейке меньше 255 символов. Если даты всегда в начале, то можно просто взять первые 255 символов, остальное обрезать
Function LastDateInText(Text As String) As Date Dim aDates As Object, aD As Object Set aDates = CreateObject("VBScript.RegExp") With aDates .Pattern = "\d\d.\d\d.\d\d\d\d" .Global = True .MultiLine = True Set aD = .Execute(Text) End With With aD For i = 0 To .Count - 1 LastDateInText = Application.WorksheetFunction.Max(LastDateInText, CDate(.Item(i))) Next i End With End Function
[/vba] это если надо вычислить наибольшую дату из стоящих вперемешку, а если просто последнюю, то вместо [vba]
Код
With aD For i = 0 To .Count - 1 LastDateInText = Application.WorksheetFunction.Max(LastDateInText, CDate(.Item(i))) Next i
[/vba] проще [vba]
Код
LastDateInText = aD.Item(aD.Count-1)
[/vba]
Могу предложить UDF [vba]
Код
Function LastDateInText(Text As String) As Date Dim aDates As Object, aD As Object Set aDates = CreateObject("VBScript.RegExp") With aDates .Pattern = "\d\d.\d\d.\d\d\d\d" .Global = True .MultiLine = True Set aD = .Execute(Text) End With With aD For i = 0 To .Count - 1 LastDateInText = Application.WorksheetFunction.Max(LastDateInText, CDate(.Item(i))) Next i End With End Function
[/vba] это если надо вычислить наибольшую дату из стоящих вперемешку, а если просто последнюю, то вместо [vba]
Код
With aD For i = 0 To .Count - 1 LastDateInText = Application.WorksheetFunction.Max(LastDateInText, CDate(.Item(i))) Next i
Function LastDateInText(Text As String) As Date Dim s$ With CreateObject("VBScript.RegExp") .Pattern = ".*(\d\d)\.(\d\d)\.(\d{4})( \(([\d:]{5}))?[^\d]?|[\s\S]+" .Global = True: .MultiLine = True Set f = .Execute(Text) s = "--{" & .Replace(Text, """$2-$1-$3 $5""" & ",") & "0}" End With With Application LastDateInText = .Max(.IfError(Evaluate(.Trim(s)), 0)) End With End Function
Function LastDateInText(Text As String) As Date Dim s$ With CreateObject("VBScript.RegExp") .Pattern = ".*(\d\d)\.(\d\d)\.(\d{4})( \(([\d:]{5}))?[^\d]?|[\s\S]+" .Global = True: .MultiLine = True Set f = .Execute(Text) s = "--{" & .Replace(Text, """$2-$1-$3 $5""" & ",") & "0}" End With With Application LastDateInText = .Max(.IfError(Evaluate(.Trim(s)), 0)) End With End Function
[/vba] +числовой формат и условное форматированиеkrosav4ig
МВТ, Подскажите пожалуйста как можно изменить данную Функцию для определения минимального значения, и еще один момент, не считываются даты находящиеся в формате.01.01.20г. - где год указан двумя символами.
МВТ, Подскажите пожалуйста как можно изменить данную Функцию для определения минимального значения, и еще один момент, не считываются даты находящиеся в формате.01.01.20г. - где год указан двумя символами.VitaliyPegushin
VitaliyPegushin, МВТ последний раз заходил на форум: Суббота, 21.01.2017, 11:53 а сегодня среда 07.10.2020... И вообще, вся тема от 2015 г. Создайте лучше свою, ссылкой на эту тему.
VitaliyPegushin, МВТ последний раз заходил на форум: Суббота, 21.01.2017, 11:53 а сегодня среда 07.10.2020... И вообще, вся тема от 2015 г. Создайте лучше свою, ссылкой на эту тему.Michael_S