从带有文本SQL/Excel/VVBA的单个字段中提取多个日期



我目前有一个带有自由文本列的电子表格,每个条目中都有多个日期,格式为13.1.11或1.11.12(dd.mm.yy(。我想做的是从每个条目中提取所有日期,下面我列出了数据样本和所需输出。有什么解决方案可以在Excel、VBA或SQL中获得所需的输出吗?

当前数据示例

  • 6.5.18-1区无int,2区有int。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

非常感谢

如果文本在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}.dd)"
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

如果这是一次性的事情,那么我建议在excel中这样做。您可以在"数据"选项卡下使用"文本到列",并以"-"作为分隔符来提取所有这些单独的事例。然后,您可以使用左/右/中函数,只提取日期值。如果这将是一件常规的事情,那么你可以使用VBA或SQL来研究更自动化的过程。希望这能有所帮助。

最新更新