转换/格式丢失的date完成date

我正在尝试编写一个VBA函数来处理丢失的date。 date可以在我的Excel工作表中input,如下所示:

  • 2012
  • 12/2012
  • 07/04/2012(这很好,不需要改变)

我需要处理像这样丢失的月份/date:

  • 2012年 – > 01/01/2012
  • 12/2012 – > 01/12/2012

此外,inputdate的单元格应该是文本而不是date,因为如果将其格式化为date,则可以将仅一年的input转换为诸如1900之类的奇怪date。

假设列A是文本格式,并且您给出的三种格式是唯一可能的。 注意:如果列A中的单元格为空,则公式会返回错误,但如果需要,则可以修复该错误。

AB 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函数来构build如下所示的date对象:DateSerial(年,月,日)。

为了得到这些部分,在inputstring上使用split这样的Split(inputstring,“/”),那么你可以使用返回的数组元素作为构build块来处理你想要执行的任何操作。

把它放在一起…

 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 

我没有testing过这个代码,但应该让你指出正确的方向。