在Excel中的单元格内确保一个有效的date

我正在准备一份信用卡交易清单,以便在Excel 2010中进行透视和进一步分析(针对个人需求)。 问题是我的银行机构没有遵循标准的date格式,所以有时date将在Jun. 1, 2013 ,有时甚至是May 27, 2013 。 第一个不被确认为Excel的date,所以它的Pivot不能在该 (月,季度等)上分组 。 列表中没有其他无法识别的date事件。

有没有办法确保在列中总是有一个有效的date?

如果我在.NET中进行编码,则可以使用一个格式stringMMM. d, yyyy ParseExact选项MMM. d, yyyy MMM. d, yyyy

另一种select是做一个If ,将任何string转换为如下所示的date:

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

(这是VB.NET的伪语法,希望能帮助解释我的意图)。 它假定一个无效的date将始终是一个string,里面有一个点,要被转换器删除 – 我很满意。

我如何在Excel中做到这一点? 寻找最简单的方法。

假设你的date是在A1 ,这个公式将它转换为时间序列格式:

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

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

另一个select是使用这个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) ,并将其格式化为任何您想要的格式。

截图:

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明

一个快速的解决办法是做一个全球取代ctl h。 更换 。 什么都没有

DateValue只能使用正确的区域设置,如果我们尝试在具有不同设置的计算机中打开,则会出现错误。 这将始终有效:(G21中的文本date)

 =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)) 

根据您的地区设置,您可能需要更换字段分隔符“;” 按“,”