不同的人以不同的方式输入数据。当您在单元格中输入信息时,Excel会尝试找出您要输入的信息类型。如果输入数字,例如08242008,则Excel将假定您正在输入数字值,并对其进行相应处理。如果您输入的数字实际上是一个没有分隔符的日期怎么办? Excel可以理解您输入的内容吗?

不幸的是,Excel不能。为什么?因为您没有给出指示,所以这应该是一个日期。 (分隔符上的Excel键,而不是数字上的Excel键。)如果您或您的数据输入人员无法更改他们的输入习惯,因此也输入了分隔符,那么您将需要某种变通方法来将输入的信息转换为实际的日期值。

您首先想到的是可以使用自定义格式来显示信息。考虑以下自定义格式:

##"/"##"/"####

此格式会将数字08152008显示为8/15/2008。唯一的问题是,它仅更改数字的显示-如果您要将日期用作真实的Excel日期,则不能这样做,因为您尚未将值转换为Excel可以识别为日期的内容。

如果输入的值在格式上非常一致,并且以文本而不是数字形式输入,那么有一种简单的方法可以将它们转换为日期。非常一致,我的意思是,输入始终使用两个数字表示月份,两个数字表示日期,四个数字表示年份。此外,包含值的单元格必须设置为文本格式。在这种情况下,您可以按照以下步骤操作:

。选择日期列。

。确保日期右边的列中没有任何内容。

。从“数据”菜单中选择“文本到列”。 (在Excel 2007中,从功能区的“数据”选项卡中选择“文本到列”。)Excel显示“将文本转换为列”向导。 (请参见图1。)

。选择固定宽度选项,然后单击下一步。

。再次单击下一步。

。在“列数据格式”区域中,选择“日期”。

。在“目标”框中选择范围,然后在工作表中单击在步骤1中选择的第一个值右边的单元格。 。单击完成。

如果一切顺利,则Excel应该已将文本值解析为日期,然后可以删除原始列。如果这不起作用,则意味着原始值未设置为文本格式,或者未使用八位数字输入所有日期。

另一种可能的解决方案是使用公式将输入的值转换为实际日期。以下是一个这样的公式:

=DATE(RIGHT(A1,4),LEFT(A1,IF(LEN(A1) = 8,2,1)),LEFT(RIGHT(A1,6),2))

此公式假定输入的日期(不带分隔符的日期)

在单元格A1中。该公式将使用七位数或八位数的日期。

如果您更喜欢自定义函数,则可以在VBA中创建一个函数,以检查传递的数据,将其转换为日期/时间格式,然后返回结果。在这方面,以下功能非常通用;它适用于美国和欧洲日期格式:

Function DateTime(dblDateTime As Double, _   Optional bAmerican As Boolean = True)

'Converts Date and time "number" without 'delimiters into an excel serialdate (which 'can then be formatted with the Excel 'date/time formats)



'If optional argument is TRUE (or missing), 'function assumes value is of form:

'   [m]mddyyyy.hhmm  (leading "0" not required)



'If optional argument is FALSE, function 'assumes value is of form:

'   [d]dmmyyyy.hhmm  (leading "0" not required)



Dim iYear As Integer     Dim iMonth As Integer     Dim iDay As Integer     Dim iHour As Integer     Dim iMin As Integer

iYear = Int((dblDateTime / 10000 - _       Int(dblDateTime / 10000)) * 10000)

iDay = Int((dblDateTime / 1000000 - _       Int(dblDateTime / 1000000)) * 100)

iMonth = Int((dblDateTime / 1000000))

iHour = Int((dblDateTime - Int(dblDateTime)) * 100)

iMin = Int((dblDateTime  100 - _       Int(dblDateTime  100)) * 100 + 0.5)



If bAmerican Then         DateTime = DateSerial(iYear, iMonth, iDay)

Else         DateTime = DateSerial(iYear, iDay, iMonth)

End If

DateTime = DateTime + (iHour + iMin / 60) / 24 End Function

该宏函数假定要传递给它的数据是一个数值,就像在输入不带分隔符的日期时通常会发生的那样。 (请参考技巧开头的逻辑。)

如您所知,有许多解决方法,但是没有一种方法像输入日期时输入分隔符那样简单。如果培训自己或您的数据输入人员很难做到这一点,则可以考虑为输入单元格设置一些数据验证规则。这些规则可以检查以确保您使用特定格式(例如带分隔符的日期)输入信息,如果不是,则阻止您。 (ExcelTips的其他问题已讨论了如何创建数据验证规则。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(2039)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本:

链接:/ excelribbon-Entering_Dates_without_Separators [输入不带分隔符的日期]。