[英]Convert this long Excel date formula into VBA
我下面有这个Excel公式;
DATE(LEFT(A1,3),MID(A1,6,1),MID(A1,7,1))
我想将此Excel公式转换为VBA用户定义的函数。
Public Function getDate(input_date As String)
'code to convert DATE(LEFT(A1,3),MID(A1,6,1),MID(A1,7,1)) to VBA
End Function
这很棘手,因为在函数参数内部使用了一些函数。 就像DATE中使用的LEFT。
编辑:如果可能的话,我想在VBA函数内部直接使用Excel公式,而只需进行最小的修改。 是否可以在Excel VBA中执行此操作?
它与您在Excel中所做的操作实际上没有任何区别,至少就在函数内调用函数而言:
Public Function getDate(input_date As String) As Date
getDate = DateSerial(1900 + CInt(Left(input_date, 3)), _
CInt(Mid(input_date, 6, 1)), _
Cint(Mid(input_date, 7, 1)))
End Function
不一定严格要求CInt
调用,就像Excel一样,VBA会将从Left
和Mid
返回的表达式强制转换为数值-但我想在这类语句中明确显示转换。 但是,如果您不希望使用它们,则可以使用以下命令,该命令与Excel公式基本相同,除了DateSerial
而不是DATE
。 (VBA Date
功能仅返回今天的日期。)
Public Function getDate(input_date As String) As Date
getDate = DateSerial(1900 + Left(input_date, 3), Mid(input_date, 6, 1), Mid(input_date, 7, 1))
End Function
由于Excel处理方式与VBA不同,因此必须在年份中加上1900。 Excel将20年定为1920年,将104年定为2004年。VBA使用窗口化方法,其中将少于30年的年份视为20yy,将30到99年之间的年份视为19yy,并将大于或等于30年的年份。 100被视为0yyy。
而且,尽管我强烈建议不要使用它,但是您可以使用Evaluate
在VBA中使用完全相同的EXCEL公式:
Public Function getDate(input_date As String) As Variant
getDate = Evaluate("DATE(LEFT(""" & input_date & """,3),MID(""" & input_date & """,6,1),MID(""" & input_date & """,7,1))")
End Function
您可以尝试这样的事情...
Public Function getDate(input_date As String)
getDate = CDate(Evaluate("DATE(LEFT(" & input_date & ",4),MID(" & input_date & ",5,2),MID(" & input_date & ",7,2))"))
End Function
Sub Test()
MsgBox getDate("20170521")
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.