确保Excel中单元格内的有效日期

时间:2014-02-22 16:11:29

标签: excel parsing date excel-2010

我正在尝试准备一份信用卡交易列表,以便在Excel 2010中进行透视和进一步分析(以满足个人需求)。问题是我的银行机构没有遵循标准日期格式,因此有时日期将以Jun. 1, 2013,有时为May 27, 2013。第一个不被Excel识别为日期,因此它的Pivot不能 Group (月,季等)。列表中没有其他无法识别的日期。

有没有办法确保列中始终有有效日期?

如果我使用.NET编码,一个选项是ParseExact使用格式字符串MMM. d, yyyy

另一个选择是执行If,将任何字符串转换为类似的日期:

If Not TypeOf MyCell Is DateTime Then _
  MyCell.Value = CDate(MyCell.Value.Substring(0,3) &
                       MyCell.Value.Substring(3))

(这是VB.NETish伪语法,希望它有助于解释我的意图)。它假设一个无效的日期总是一个字符串,里面有一个点,由转换器删除 - 我没关系。

我将如何在Excel中执行此操作?寻找最简单的方法。

3 个答案:

答案 0 :(得分:3)

假设您的日期位于A1,此公式会将其转换为时间序列格式:

=DATEVALUE(SUBSTITUTE(A1,".",""))

然后,您可以将其格式化为您想要的任何格式。

另一个选择是使用此UDF:

Function MorphDate(strDate As String) As Date
    Application.Volatile
    If VarType(strDate) <> 8 Then Exit Function
    Res = Replace(strDate, ".", "")
    MorphDate = Res
End Function

像这样使用:=MorphDate(A1),并将其格式化为您想要的任何格式。

<强>截图:

enter image description here

enter image description here

enter image description here

答案 1 :(得分:2)

快速修复将是全局替换ctl h。更换 。什么都没有

答案 2 :(得分:1)

DateValue仅适用于正确的区域设置,如果我们尝试在具有不同设置的计算机中打开它,则会出现错误。这将始终有效:( G21中的文字日期)

=DATE(RIGHT(G21;4);MATCH(1;1*(LEFT(G21;3)={"Jan";"Feb";"Mar";"Apr";"May";"Jun";"Jul";"Aug";"Sep";"Oct";"Nov";"Dec"});0);MID(G21;FIND(",";G21)-2;2))

根据您的区域设置,您可能需要替换字段分隔符“;”通过“,”