Извлечение нескольких дат из одного поля с текстом SQL / Excel / VBA - PullRequest
0 голосов
/ 05 марта 2020

В настоящее время у меня есть электронная таблица со столбцом свободного текста, в каждой записи есть несколько дат в формате 13.1.11 или 1.11.12 (дд.мм.гг). Что я хотел бы сделать, это извлечь все даты из каждой записи, ниже я привел образец данных, а также желаемый результат. Есть ли какие-либо решения для получения желаемого результата в Excel, VBA или SQL?

Пример текущих данных

  • 6.5.18 - нет int в зоне 1, но int в зоне 2. 18.7.19 - летнее обновление.
  • 12.7.19 - возможно, есть французский инвестор. 11.9.19 - инвестирует в серию c фирм
  • 4.5.17 - Джеймс заинтересован в покупке. 14.3.18 - инвестировать только в пройденные предприятия. 20.11.18 - отправлен материал. 24.7.19 - летнее обновление.
  • Зона IV 5.9.19 - недоступно

Желаемый выход

  • 6.5.18; 18.7.19
  • 12.7.19; 11.9.19
  • 4.5.17; 14.3.18; 20.11.18; 24.7.19
  • 5.9.19

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Если текст в столбце A, это поместит даты в столбец B.

Option Explicit
Sub ExtractDates()

    Dim ws As Worksheet, sPattern As String
    Set ws = ThisWorkbook.Sheets(1)

    Dim Regex As Object
    Set Regex = CreateObject("vbscript.regexp")

    sPattern = "(\d{1,2}\.\d{1,2}\.\d\d)"
    With Regex
      .Global = True
      .MultiLine = False
      .IgnoreCase = True
      .Pattern = sPattern
    End With

    Dim cell, sOut As String, iLastRow As Long
    Dim match, dt

    iLastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
    For Each cell In ws.Range("A1:A" & iLastRow)
        sOut = ""
        If Regex.test(cell) Then
            Set match = Regex.Execute(cell)
            For Each dt In match
                If Len(sOut) > 0 Then sOut = sOut & "; "
                sOut = sOut & dt
            Next
            cell.Offset(0, 1) = sOut
        End If
    Next

End Sub
0 голосов
/ 05 марта 2020

Если это один раз, то я бы предложил сделать это в Excel. Вы можете использовать «Text to Column» на вкладке «Data» с «-» в качестве разделителя для извлечения всех этих отдельных случаев. Затем вы можете использовать функции left / right / mid, чтобы извлечь только значения даты. Если это будет обычным делом, вы можете посмотреть на более автоматизированные процессы, используя VBA или SQL. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...