[英]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.