我想寫一個VBA函數來處理丟失的日期。轉換/格式丟失日期到完成日期
- 12/2012
- 07月04日(這是好事,沒有必要改變)
我需要:日期可以在我的Excel工作表中按如下方式輸入處理這樣的失蹤月/日期:
- 2012 - > 01/01/2012
- 12/2012 - > 2012年1月12日
而且,當輸入的日期應爲文本,而不是日期,因爲如果其格式爲日起,可以每年只進入轉換成一些奇怪的日期1900年一樣
我想寫一個VBA函數來處理丟失的日期。轉換/格式丟失日期到完成日期
我需要:日期可以在我的Excel工作表中按如下方式輸入處理這樣的失蹤月/日期:
而且,當輸入的日期應爲文本,而不是日期,因爲如果其格式爲日起,可以每年只進入轉換成一些奇怪的日期1900年一樣
假設列A是文本格式,並且您給出的3種格式是唯一可能的。注意:如果A列中的單元格爲空,則公式會返回錯誤,但如果需要,它可以被修復。
A B
2012 =DATE(A1,1,1)
12/2012 =DATE(RIGHT(A2,4),LEFT(A2,2),1)
07/04/2012 =DATE(RIGHT(A3,4),LEFT(A3,2),MID(A3,4,2))
ANY FORMAT =IF(LEN(A4)=4,DATE(A4,1,1),IF(LEN(A4)=7,DATE(RIGHT(A2,4),LEFT(A2,2),1),DATE(RIGHT(A3,4),LEFT(A3,2),MID(A3,4,2))))
您可以使用DateSerial函數來構建如下所示的Date對象:DateSerial(year,month,day)。
爲了得到零件,在輸入字符串上使用split(splittring)(inputstring,「/」),然後可以使用返回的數組元素作爲構建塊,以便執行任何處理。
將其組合在一起......
Public Function DateFromString(inputString as String) as Date
Dim dateParts as String()
dateParts = Split(inputString, "/")
Dim year as Integer
Dim month as Integer
Dim day as Integer
If Ubound(dateParts) = 3 Then
month = dateParts(1)
day = dateParts(2)
year = dateParts(3)
Else If Ubound(dateParts) = 2 Then
day = dateParts(1)
year = dateParts(2)
Else If Ubound(dateParts) = 1 Then
year = dateParts(1)
End If
<check for missing date elements and provide values per business rules here...>
DateFromString = DateSerial(year, month, day)
End Function
我沒有測試此代碼,但它應該讓你在正確的方向。
我認爲split有LBound = 0,所以你的條件分別是UBound = 2,1和0。 – assylias 2012-03-29 11:09:04
+1 NICELY DONE :) – 2012-03-29 10:01:44
謝謝!看起來不錯,但我想要的是在VBA中使用它,而不是在Excel表中。我怎樣才能做到這一點? – Tal 2012-03-29 10:25:26