Здравствуйте! Пытался воспользоваться поиском, но не нашёл. Если «криво» искал, дайте, пжл, ссылку. Прошу помощь в следующем вопросе. В ячейке А1 есть текст в виде от 29 мая 2013 г. 20:41:17 Каким образом в VBA я могу переменной присвоить в данном случае значение 29.05.2013? Кроме использования на первом этапе функций split, instr и mid с последующим ковырянием полученного значения ничего в голову не приходит. Но мне кажется это можно сделать как-то проще. Благодарю за помощь, спасибо!
какие еще могут быть варианты написания даты? Может быть произвольный текст в котором есть упоминание даты, либо строгие правила "от ДД ММММ ГГГГ ...", нужна искать "мая" или может быть "май"? Если текст произвольный, то скорее всего только через регулярные выражения Приведите различные примеры текста, из которого нужно "выдернуть" дату
Это формат даты, в котором она представлена в присылаемом отчете, и он стабилен: "от 29 мая 2013 г. 20:41:17", "от 14 сентября 2015 г. 20:41:17", "от 22 декабря 2011 г. 20:41:17" и т.д. Спасибо!
Public Function GetDate(ByVal this As String) As Date
Static pReg As Object
If pReg Is Nothing Then
Set pReg = CreateObject("VBScript.RegExp"): pReg.IgnoreCase = True
pReg.Pattern = "(^| )\d{1,2} [адимносфя][а-геклн-уюя]{1,6}(а|я) \d{4}(?= |г|$)"
End If
If pReg.Test(this) Then GetDate = DateValue(pReg.Execute(this)(0).Value)
End Function
Если данной даты в указанном формате нет, то вернёт 0:00:00
anvg, Спасибо за помощь, буду разбираться. Скажите, а другого варианта перевода письменного месяца в цифру нет? Предложенный вариант может оказаться слишком сложным для моего понимания. Ещё раз спасибо! PS Что-то я распривередничался! Буду разбираться. Спасибо!
iba2004, выложите на форуме Excel-книгу, в которой будет дата, чтобы посмотреть, как сформирована дата - с помощью человека или с помощью средств программы "Excel" (формата ячеек).
Public Function GetDateSmp(ByVal this As String) As Date
Dim pos1 As Long, pos2 As Long
pos1 = InStr(1, this, "от ", vbTextCompare)
pos2 = InStr(pos1 + 3, this, "г.", vbTextCompare)
GetDateSmp = DateValue(Mid$(this, pos1 + 3, pos2 - pos1 - 4))
End Function
anvg, Спасибо Вам за помощь! Скрипт, К сожалению файл рабочий, могу выложить тольку шапку. Но, anvg мне уже помог разобраться. Спасибо Вам за желание помочь!
Юрий М, Можно, поэтому и написал, что "только шапку". Но: во-первых, я не знал будет ли этого достаточно для понимания; во-вторых, как я написал, anvg мне уже помог и мне не хотелось "грузить" форум лишними файлами.
Function aaa(t$) As Date
With CreateObject("VBScript.RegExp"): .Pattern = "от (.+) г\."
aaa = DateValue(.Execute(t)(0).Submatches(0))
End With
End Function
Юрий М, то-то я смотрю, что Андрей записан так необычно))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄