我想写一个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