复杂的日期操作

时间:2015-10-07 09:56:56

标签: excel vba excel-vba date datetime

我目前每天必须操纵不同数量的日期(从200到1Mil加上),我目前使用一个相当啰嗦的AHK脚本,使用COM接口读取日期,然后回写新的。我的脚本适用于较小的数量(任何高达5,000),但由于COM固有的缓慢性质,需要花费很长的时间来处理大量的数据。

我在其他任务中取得了一些成功,其中使用VBA甚至嵌套的if语句为我提供了更快的结果,但我的VBA知识却相当缺乏。

我的目标:

要检查当前格式为<div style="padding-right:10px; max-width:575px; width:60%; min-width:320px; padding-bottom:20px;"> <img ... ... </div> 的日期,例如dd/mm/yyyy ss/mm/hh,请执行以下两项任务之一:

  • 如果输入日期是星期二,就像上例中的那样,将单元格更改为22/09/2015 45:12:23(切断时间段)

  • 如果输入日期是一周中的任何其他日期,则需要将其更改为下一个星期二的日期(仍然截止时间部分)。例如,如果输入日期为22/09/201523/09/2015,则需要将其更改为25/09/2015

我可以让它循环通过列,但在VBA中,这与我的技能程度有关。

答案

感谢大家的快速回答。我已经设法调整下面提供的一个,以获得适合我现在的情况。最终结果是(A1是输入日期):

29/09/2015

2 个答案:

答案 0 :(得分:0)

我尝试通过Excel函数TEXT解决此问题,但与VBA函数Format不同,它无法返回当前工作日的编号。所以最好的解决方案似乎是使用VBA。

此功能可以解决您的问题:

Public Function getTuesday(inputDate As Date)
If Format(inputDate, "w", vbTuesday) = 1 Then
    getTuesday = CDate(Int(inputDate))
Else
    getTuesday = CDate(Int(inputDate) + 8 - Format(inputDate, "w", vbTuesday))
End If
End Function

答案 1 :(得分:0)

我不确定您的日期字符串是字符串还是“实际日期”,只是在Excel中格式化为您显示的内容。以下VBA函数应该处理两个实例。

该功能的主要部分是这一行:

Tuesday = Dt + 7 - Weekday(Dt - 3)

其中Dt仅为相关日期,仅为日期(无时间)。这也可以用作工作表函数。

Function Tuesday(ByVal Dt) As Date

'not sure if date is a string or a "real date"
'   so will test

Select Case VarType(Dt)
    Case vbString
        Dt = DateSerial(Mid(Dt, 7, 4), Mid(Dt, 4, 2), Left(Dt, 2))
    Case vbDate
        Dt = Int(Dt)
    Case Else
        MsgBox "Date is unknown"
        Exit Function
End Select

Tuesday = Dt + 7 - Weekday(Dt - 3)

End Function