如何验证YYYYMMDD条目的整个列,并检查它们在Excel VBA中是否为有效日期?

时间:2018-10-29 10:28:40

标签: excel vba excel-vba

我只有几列包含yyyymmdd格式的日期数据。我想验证条目是否有效。我该怎么办?

2 个答案:

答案 0 :(得分:1)

选择整个列,然后运行“文本到列”,“固定宽度”,“日期:YMD”,“完成”。可以转换为真实日期的所有内容都将转换为真实日期。

with Selection
    .TextToColumns Destination:=.cells(1), DataType:=xlFixedWidth, _
                   FieldInfo:=Array(0, xlYMDFormat)
end with

答案 1 :(得分:0)

以下内容应验证Excel可以理解为yyyymmdd格式的日期。

请注意,在1900日期系统中,有一种特殊情况适用于1900年2月29日。 1900年不是a年。但是Excel认为这是一个有效日期,据称可以创建与做相同事情的Lotus 1-2-3的兼容性。

Option Explicit
Function validExcelDate(num As Long) As Boolean
    Dim Y As Long, M As Long, D As Long
    Dim leapYr As Boolean
    Dim dt1904 As Boolean

dt1904 = ThisWorkbook.Date1904

'Would also be valid year if test passed
If num < IIf(dt1904, 19040101, 19000101) _
    Or num > 99991231 Then Exit Function

'special case
If num = 19000229 Then
    validExcelDate = True
    Exit Function
End If

D = num Mod 100
M = Int((num Mod 10000) / 100)
Y = Int(num / 10000)

'valid month
If M < 1 Or M > 12 Then Exit Function

'valid day
If D < 1 Then Exit Function
leapYr = LY(Y)

Select Case M
    Case 4, 6, 9, 11
        If D > 30 Then Exit Function
    Case 2
        If D > 29 Then Exit Function
        If leapYr = False And D > 28 Then Exit Function
    Case Else
        If D > 31 Then Exit Function
End Select

validExcelDate = True
End Function

Private Function LY(yr As Long) As Boolean
    If yr / 4 = Int(yr / 4) And _
        Not (yr / 100 = Int(yr / 100)) Then _
        LY = True
    If yr / 400 = Int(yr / 400) Then LY = True
End Function