Страницы: 1
RSS
«Выдёргивание» в VBA из текстовой строки даты
 
Здравствуйте!
Пытался воспользоваться поиском, но не нашёл. Если «криво» искал, дайте, пжл, ссылку.
Прошу помощь в следующем вопросе. В ячейке А1 есть текст в виде от 29 мая 2013 г. 20:41:17
Каким образом в VBA я могу переменной присвоить в данном случае значение 29.05.2013?
Кроме использования на первом этапе функций split, instr и mid с последующим ковырянием полученного значения ничего в голову не приходит. Но мне кажется это можно сделать как-то проще.
Благодарю за помощь, спасибо!
Изменено: iba2004 - 02.06.2013 09:23:39
 
Написа'л такую вещь:
Код
Sub Макрос2()
Dim a As Variant

a = Split(Cells(1, 1))
Cells(1, 2) = a(1) + " " + a(2) + " " + a(3)

End Sub


но она даёт в ячейке В1 29 мая 2013.
Как быть дальше, не знаю.  :(
Изменено: iba2004 - 02.06.2013 09:42:32
 
какие еще могут быть варианты написания даты?
Может быть произвольный текст в котором есть упоминание даты, либо строгие правила "от ДД ММММ ГГГГ ...", нужна искать "мая" или может быть "май"?
Если текст произвольный, то скорее всего только через регулярные выражения
Приведите различные примеры текста, из которого нужно "выдернуть" дату
Изменено: MCH - 02.06.2013 09:45:18
 
Это формат даты, в котором она представлена в присылаемом отчете, и он стабилен: "от 29 мая 2013 г. 20:41:17", "от 14 сентября 2015 г. 20:41:17", "от 22 декабря 2011 г. 20:41:17" и т.д.
Спасибо!
Изменено: iba2004 - 02.06.2013 09:52:40
 
На регулярных
Код
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 - 02.06.2013 09:57:52
 
anvg,
Спасибо за помощь, буду разбираться.  :)  
Скажите, а другого варианта перевода письменного месяца в цифру нет?
Предложенный вариант может оказаться слишком сложным для моего понимания.
Ещё раз спасибо!
PS
Что-то я распривередничался! Буду разбираться. :)
Спасибо!
Изменено: iba2004 - 02.06.2013 10:08:12
 
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 мне уже помог разобраться.
Спасибо Вам за желание помочь!
 
Цитата
iba2004 пишет:
К сожалению файл рабочий, могу выложить тольку шапку.
А пару строк, ну НИКАК нельзя...
 
Юрий М,
Можно, поэтому и написал, что "только шапку". Но:
во-первых, я не знал будет ли этого достаточно для понимания;
во-вторых, как я написал, anvg мне уже помог и мне не хотелось "грузить" форум лишними файлами.
 
Цитата
iba2004 пишет:
...и мне не хотелось "грузить" форум лишними файлами.
Показав пару строк с данными, Вы бы сократили саму тему до классического варианта: вопрос-ответ-спасибо.
 
ещё вариант функции в C1

 
Код
Function aaa(t$) As Date
 With CreateObject("VBScript.RegExp"): .Pattern = "от (.+) г\."
  aaa = DateValue(.Execute(t)(0).Submatches(0))
 End With
End Function
Изменено: кузя1972 - 09.12.2018 21:21:24
 
кузя1972, и как это Вы добрались до темы 2013 года? ))
 
Юрий М, то-то я смотрю, что Андрей записан так необычно))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх