gpt4 book ai didi

vba - 比较vba中的日期

转载 作者:行者123 更新时间:2023-12-04 20:31:09 25 4
gpt4 key购买 nike

enter image description here

我在比较 Excel 中的日期时遇到问题。一个日期值是从工作表中提取的,格式为“24-JAN-17”。其他数据在“2017-12-31”的脚本中声明。有谁知道比较两个日期的解决方案,以便我可以确定从工作表中提取的日期值是否晚于 2018 年。我已将代码包含在下面的当前状态中。

Sub removeWrongYear()

Dim i As Long, yearA As Long, rowsCnt As Long
Dim rowsToDelete As Range
Dim vData As Variant

yearA = 2017

With ActiveSheet

'1st to 635475 row, 20th column
vData = Range(.Cells(1, 20), .Cells(635475, 20))

For i = UBound(vData) To 2 Step -1
If vData(i, 1) > DateSerial(yearA, 12, 31) Then
rowsCnt = rowsCnt + 1

If rowsCnt > 1 Then
Set rowsToDelete = Union(rowsToDelete, .Rows(i))
ElseIf rowsCnt = 1 Then
Set rowsToDelete = .Rows(i)
End If

End If
Next i

End With

If rowsCnt > 0 Then
Application.ScreenUpdating = False
rowsToDelete.EntireRow.Delete
Application.ScreenUpdating = True
End If

End Sub

最佳答案

您正在使用工作表上的字符串文字值,它们以美国日期格式 (DD-MMM-YY) 表示日期。这些不是 Date值,它们只是字符串。因此,当您尝试将其解析为像“22-JAN-18”之类的字符串时,例如使用 Year函数,我的理解是它应该返回“2018”。但是使用不同的语言环境设置可能会很棘手,而且由于 VBA(尽管有语言环境设置)总是(?)以美国格式解释日期,这一事实变得复杂。

你能测试一下吗:

Sub test()

Dim s as String
s = "22-JAN-18"
Debug.Print Year(s)

End Sub

如果这不起作用,请尝试:
Debug.Print Year(Format(s, "DD-MMM-YY"))

这可能有效,因为您明确指定了类似日期的字符串的格式。

如果可行,请尝试:
Dim theDate as Date
theDate = DateValue(Format(vData(i, 1), "DD-MMM-YY"))

If Year(theDate) > yearA Then
...

关于vba - 比较vba中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50395080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com