VBA Excel日期格式化帮助

时间:2018-04-04 16:45:29

标签: excel vba excel-vba

所以,我遇到了典型的日期格式问题。

这让我很头疼。 出于安全原因,我无法共享数据。但是,我可以描述格式。 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

1 个答案:

答案 0 :(得分:0)

你提供了一个模棱两可的约会。 02/04/2018,具体取决于您的语言区域,可以是04-Feb-201802-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写入工作表的相应部分,并根据需要格式化单元格。