| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 
课件制作网.
收藏本站
设为首页
安全365
如何在 Excel 中将数字转换为日期?
如何在 Excel 中将数字转换为日期?
作者:佚名 文章来源:不详 点击数: 更新时间:2007-1-24 11:13:24
问:

您好,脚本专家!如何在 Excel 中将数字转换为日期;例如,如何将 40806 转换为 4/8/2006?

-- JM

答:

您好,JM。您可能不知道,有一个脚本专家的兄弟是演员。每个演员都知道,演艺圈中认人为亲的风气相当普遍。嗯,好在脚本专家不是演员,因为我们决不屈服于这样的徇私风气。(我说好在脚本专家不是演员还有其它原因,但那是另外一回事。)我们会随机地从每天收到的数百个问题中选择一些问题来回答。因此,嗯,JM 小兄弟,您想知道什么?哦,对了,是如何在 Excel 中将数字转换为日期。

我们从您的电子邮件了解到,您好像有一个含数字列的电子表格,数字的前一两位(取决于月份)代表月,接下来的两位(始终是两位)代表日,最后两位或四位(06 或 2006)代表年。就如下图所示:

您好,脚本专家!


我们的第一个想法是只使用 FormatDateTime 方法。此方法接受字符串并以日期格式输出该字符串:

strNew = FormatDateTime(strOld)

我们遇到的问题是表中的第一个日期 40806 变成了 9/20/2011。为什么呢?嗯,Excel 的一个有趣之处就是,当您试图将数字转换为日期时,程序会假定该数字是一个序列号,代表自 1900 年 1 月 1 日起所发生的天数。自 1900 年 1 月 1 日 算起的第 40806 天就是 2011 年 9 月 20 日。看来我们得从头开始了。

最后,我们决定将数字按字符串处理:使用 VBScript 函数 LeftRightMid 将字符串分开,然后将返回的各部分放在一起并加上相应的符号,这些符号会让 Excel 知道我们要的是实际日期,而不是序列号。下面就是我们提供的脚本:

Set objExcel = CreateObject("Excel.Application")

Set objWorkbook = objExcel.Workbooks.Open("C:/scripts/test.xls")



intRow = 1

intCol = 1

i = 0



Do Until objExcel.Cells(intRow,intCol).Value = ""

    strDate = objExcel.Cells(intRow, intCol).Value

    i = Len(strDate)

    If i > 6 Then

        dtYear = Right(strDate, 4)

        i = i - 5

    Else

        dtYear = Right(strDate, 2)

        i = i - 3

    End If

    dtDay = Mid(strDate, i, 2)

    i = i - 1

    dtMonth = Left(strDate, i)

    newDate = dtMonth & "/" & dtDay & "/" & dtYear



    objExcel.Cells(intRow, intCol).Value = newDate

    intRow = intRow + 1

Loop



objExcel.Visible = True

我们首先要做的就是创建一个 Excel 对象并打开电子表格。然后我们构建一个 Do 循环以遍历整个日期列。到达列中的空单元格时循环即会停止;如果每个列中都没有日期,就必须修改此脚本。

接下来,我们从第一个单元格(恰好是第 1 行第 1 列)读入日期:

strDate = objExcel.Cells(intRow, intCol).Value

然后,使用 Len 函数检索日期字符串中的字符数。因为字符串的长度不总是一样的,所以在逐位读取字符串时要使用此数字来跟踪剩余的字符数。

读取字符串时,我们从其结尾处开始。考虑各种日期格式,含两位年份的字符串最长为六个字符,而含四位年份的字符串最短为七个字符。因此我们检查字符串是否多于六个字符;如果是,意味着此特定值肯定使用四位数字表示年份。因此,我们使用 Right 函数读取后四个字符并将其保存为年份。如果字符串含六个或更少的字符,只能意味着一件事情:它使用两位数字表示年份。因此,我们只读入后两个字符并将其保存为年份:

If i > 6 Then

    dtYear = Right(strDate, 4)

    i = i - 5

Else

    dtYear = Right(strDate, 2)

    i = i - 3

End If

如您所见,我们又将剩下的字符串长度减去年份长度加一。在接下来往回读取字符串来确定日的时候(哦对了,这些是美国格式的日期),我们会用到此数字:

dtDay = Mid(strDate, i, 2)

i = i - 1

这里我们用 Mid 函数表示要从位置 i 处开始检索两个字符;前面我们说过,因为我们要检索两个字符,所以 i 等于字符串长度减去年份长度再减一。换言之,我们的第一个字符串含有五个字符,因此 i 值为 5。读取年份后,i 值等于 5 - 2 - 1,即 2。我们从第 2 位开始提取两个字符,恰好就代表日。然后我们再减去 1,并使用此位置来检索月份:

dtMonth = Left(strDate, i)

这里我们用 Left 函数检索剩余字符数(在本例中为一),并将其保存为月份。接下来,只需将字符串放在一起,用斜杠 (/) 分隔日期的各部分:

newDate = dtMonth & "/" & dtDay & "/" & dtYear

之后,我们将新字符串放入其原始单元格中,将行数递增,在该列的下一行重新开始循环。最后一件事是使 Excel 可见,以便您能看到结果。

就是这样。代我们问候母亲。嗯,是代我们问候您的母亲…。

【转自世纪安全网 http://www.21safe.com】
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    CSO们如何应对新技术的安
    普通企业如何应对黑客攻
    企业该如何防范由VoIP引
    浅谈IT如何实现企业的应
    黑客与正规企业是如何串
    如何无限制申请Gmail 2.
    企业如何避免人为因素的
    社会工程学:如何利用黑客
    如何在一个文件被添加到
    如何将“珊瑚虫”好友请

    Copyright © 2006-2008 www.anquan365.com 安全365
    建议使用1024*768分辨率及第三方浏览器对本站进行浏览