Excel Dateserial()奇怪的行为
有人能给我解释一下为什么这个代码:Excel Dateserial()奇怪的行为,excel,vba,Excel,Vba,有人能给我解释一下为什么这个代码: MsgBox DateSerial(Int(Val(Left("20180618", 4))), Int(Val(Mid("20180618", 3, 2))), Int(Val(Right("20180618", 2)))) 返回2019年6月18日???因为Mid20180618,3,2是18,它会溢出一年中的12个月,并将年份数增加1 显然你是指20180618,5,2年中期 巧合的是,Mid20180618,5,2和Mid20180618,3,2之间
MsgBox DateSerial(Int(Val(Left("20180618", 4))), Int(Val(Mid("20180618", 3, 2))), Int(Val(Right("20180618", 2))))
返回2019年6月18日???因为Mid20180618,3,2是18,它会溢出一年中的12个月,并将年份数增加1
显然你是指20180618,5,2年中期
巧合的是,Mid20180618,5,2和Mid20180618,3,2之间的差异正好是12个月,因此您只看到年份的变化,而没有其他变化。您的中间值返回了错误的所需数字,请将其用作您的中间值
Int(Val(Mid("20180618", 5, 2)))
每当你有很多参数,这些参数在代码中的计算结果是不同的,试着看看每个参数本身的计算结果是什么。Debug.Print是查看它的好方法:
Sub Main()
Debug.Print (Left("20180618", 4))
Debug.Print (Mid("20180618", 3, 2))
Debug.Print (Right("20180618", 2))
End Sub
因此,您将得到:
2018
18
18
从那里可以看到错误。因为,当参数超过12个月时,年份增加:
调试.打印日期Serial2015,13,1返回2016年1月1日
相同的工作日数:
Debug.Print DateSerial2015,1363返回2015年12月29日