我正在尝试编写一个VBA函数来处理缺少的日期。日期可以在我的Excel工作表中输入,如下所示:
我需要像这样处理丢失的月份/日期:
此外,输入日期的单元格应该是文本而不是日期,因为如果格式化为日期,它可以将仅年份的条目转换为某个奇怪的日期,如1900.
答案 0 :(得分:3)
假设列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))))
答案 1 :(得分:2)
您可以使用DateSerial函数构建如下日期对象:DateSerial(年,月,日)。
为了获取部件,在输入字符串上使用拆分(如Split(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
我没有测试过这段代码,但它应该让你指向正确的方向。