所以,我遇到了典型的日期格式问题。
这让我很头疼。 出于安全原因,我无法共享数据。但是,我可以描述格式。 VBA很简单,她可以解决。
简而言之,
我的宏从Col C获取数据,其中正则表达式提取部门和日期。
然后我在循环中调用它们将数据粘贴到Col A,B,最后是C以替换原始数据。
我的问题是,Col B有一个约会。
它被提取为“02/04/2018”,但是当它粘贴到col中时,它显示为04/02/2018。这是一个大问题。
我无法保持VBA宏,或设置格式。到目前为止。
我会在下面附上我的剧本,你可以告诉我。
谢谢!
聚苯乙烯。这是我怀疑的问题。
ws.Range("B" & x).Value = match.SubMatches(3)
我无法弄清楚如何设置从字符串中提取的值。叹息。
Sub Link()
Dim ws As Worksheet
Dim lastRow As Long, x As Long
Dim matches As Variant, match As Variant
Dim Reg_Exp As Object
Dim rValue As String
Set Reg_Exp = CreateObject("vbscript.regexp")
Reg_Exp.Pattern = "([\s\S]+?):\s*([\s\S]+?)\s*-\s*([A-z]+)\s*,\s*([0-9]{2}\/[0-9]{2}\/[0-9]{4})\b"
Set ws = Sheet2
lastRow = ws.Range("C" & Rows.Count).End(xlUp).Row
For x = 1 To lastRow
Set matches = Reg_Exp.Execute(CStr(ws.Range("C" & x).Value))
If matches.Count > 0 Then
For Each match In matches
ws.Range("A" & x).Value = match.SubMatches(3) & match.SubMatches(1)
ws.Range("B" & x).Value = match.SubMatches(3)
ws.Range("C" & x).Value = match.SubMatches(1)
Next match
End If
Next x
End Sub
答案 0 :(得分:0)
你提供了一个模棱两可的约会。 02/04/2018
,具体取决于您的语言区域,可以是04-Feb-2018
或02-Apr-2018
。
究竟如何解决问题取决于您的区域设置。
但是,你可以做的是通过分别提取月,日和年以及从中创建日期来创建一个明确的日期。
更改正则表达式模式以分别拆分日期部分。
([\s\S]+?):\s*([\s\S]+?)\s*-\s*([A-z]+)\s*,\s*([0-9]{2})\/([0-9]{2})\/([0-9]{4})\b
然后添加到您的代码行中:
Dim DT as Date
... your regex stuff ...
With mc(0)
'DT = DateSerial(.SubMatches(5), .SubMatches(3), .SubMatches(4))
' or
'DT = DateSerial(.SubMatches(5), .SubMatches(4), .SubMatches(3))
End With
根据原始数据中的日期是MDY还是DMY格式,选择合适的行。
然后,您可以将DT
写入工作表的相应部分,并根据需要格式化单元格。