复杂的date操作
我现在必须每天处理不同数量的date(从200到1Mil加),我现在用一个相当冗长的AHK脚本来处理,它使用COM接口来读取date,并写回新的date。 我的脚本适合数量较less(高达5,000的任何内容),但是由于COM固有的缓慢特性,需要花费大量的时间来处理大量数据。
在其他使用VBA或嵌套if语句的任务中,我已经取得了一些成功,但是我的VBA知识却相当缺乏。
我的目标:
要检查当前格式为dd/mm/yyyy ss/mm/hh
,例如22/09/2015 45:12:23
并执行以下两项任务之一:
-
如果inputdate如上例所示,将单元格更改为
22/09/2015
(切断时间段) -
如果inputdate是一周中的任何一天,则需要更改为下一个星期二的date(仍然中断时间段)。 例如,如果inputdate是2015年9月23日或
25/09/2015
,则需要更改为29/09/2015
。
我可以通过列循环,但在VBA,这是关于我的技能的程度。
回答
感谢大家的迅速回答。 我已经设法调整下面提供的一个适合我现在的情况。 最终结果是(A1是inputdate):
=A1+(8-WEEKDAY(A1,12))*(WEEKDAY(A1,12)>1)-MOD(A1+(8-WEEKDAY(A1,12))*(WEEKDAY(A1,12)>1)-3,7)
我试图通过Excel函数TEXT
来解决这个问题,但与VBA函数Format
,它不能返回当前工作日的编号。 所以最好的解决scheme似乎是使用VBA。
这个function应该能解决你的问题:
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
我不确定如果您的datestring是一个string或“真正的date”,只是在Excel中显示的格式。 下面的VBA函数应该处理这两个实例。
该函数的主要部分是这一行:
Tuesday = Dt + 7 - Weekday(Dt - 3)
其中Dt仅仅是相关的date,仅作为一个date(没有时间)。 这也可以用作工作表函数。
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