我目前每天必须操纵不同数量的日期(从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/2015
或23/09/2015
,则需要将其更改为25/09/2015
。
我可以让它循环通过列,但在VBA中,这与我的技能程度有关。
答案
感谢大家的快速回答。我已经设法调整下面提供的一个,以获得适合我现在的情况。最终结果是(A1是输入日期):
29/09/2015
答案 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