你目前正处于脱机状态,正在等待 Internet 重新连接

如何计算之前在 Excel 中的 1/1/1900年的年龄

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 245104
概要
尽管 Microsoft Excel 日期公式只能使用之间输入的日期 1/1/1900年和 12/31/9999,您可以使用自定义的 Microsoft Visual Basic 应用程序函数以计算年龄年) 中的某个人或内容的首次创建之前 1900 年 1 月 1。

back to the top

使用计算年龄的宏

Microsoft 提供的编程示例只,用于说明不附带任何明示或暗示保证。这包括,但不限于对适销性或针对特定用途的适用性的暗示的担保。本文假定您熟悉演示了正在使用的编程语言以及用于创建和调试过程的工具。Microsoft 支持工程师可以帮助解释某个特定过程的功能,但他们不会修改这些示例以提供额外的功能或构建过程来满足您的具体要求。
Excel 将以文本形式输入 1/1/1900年之前的日期。此函数适用于以 1/1/0001 开头的文本作为输入的日期、 正常的日期和可以处理时起始日期是 1900年之前和结束日期后 1900年的日期。若要将该宏,请按照下列步骤操作:
  1. 启动 Excel。查看您要在其使用该函数在工作的表。
  2. 请按 ALT + F11 切换到 Visual Basic 编辑器。
  3. 插入 菜单上单击 模块
  4. 在模块中键入下面的代码:
    ' This is the initial function. It takes in a start date and an end date.Public Function AgeFunc(stdate As Variant, endate As Variant)        ' Dim our variables.    Dim stvar As String    Dim stmon As String    Dim stday As String    Dim styr As String    Dim endvar As String    Dim endmon As String    Dim endday As String    Dim endyr As String    Dim stmonf As Integer    Dim stdayf As Integer    Dim styrf As Integer    Dim endmonf As Integer    Dim enddayf As Integer    Dim endyrf As Integer    Dim years As Integer        ' This variable will be used to modify string length.    Dim fx As Integer    fx = 0        ' Calls custom function sfunc which runs the Search worksheet function    ' and returns the results.    ' Searches for the first "/" sign in the start date.    stvar = sfunc("/", stdate)        ' Parse the month and day from the start date.    stmon = Left(stdate, sfunc("/", stdate) - 1)    stday = Mid(stdate, stvar + 1, sfunc("/", stdate, sfunc("/", stdate) + 1) - stvar - 1)        ' Check the length of the day and month strings and modify the string     ' length variable.    If Len(stday) = 1 Then fx = fx + 1    If Len(stmon) = 2 Then fx = fx + 1        ' Parse the year, using information from the string length variable.    styr = Right(stdate, Len(stdate) - (sfunc("/", stdate) + 1) - stvar + fx)            ' Change the text values we obtained to integers for calculation     ' purposes.    stmonf = CInt(stmon)    stdayf = CInt(stday)    styrf = CInt(styr)        ' Check for valid date entries.    If stmonf < 1 Or stmonf > 12 Or stdayf < 1 Or stdayf > 31 Or styrf < 1 Then        AgeFunc = "Invalid Date"        Exit Function    End If    ' Reset the string length variable.    fx = 0        ' Parse the first "/" sign from the end date.    endvar = sfunc("/", endate)        ' Parse the month and day from the end date.    endmon = Left(endate, sfunc("/", endate) - 1)    endday = Mid(endate, endvar + 1, sfunc("/", endate, sfunc("/", endate) + 1) - endvar - 1)        ' Check the length of the day and month strings and modify the string     ' length variable.    If Len(endday) = 1 Then fx = fx + 1    If Len(endmon) = 2 Then fx = fx + 1        ' Parse the year, using information from the string length variable.    endyr = Right(endate, Len(endate) - (sfunc("/", endate) + 1) - endvar + fx)            ' Change the text values we obtained to integers for calculation     ' purposes.    endmonf = CInt(endmon)    enddayf = CInt(endday)    endyrf = CInt(endyr)        ' Check for valid date entries.    If endmonf < 1 Or endmonf > 12 Or enddayf < 1 Or enddayf > 31 Or endyrf < 1 Then        AgeFunc = "Invalid Date"        Exit Function    End If        ' Determine the initial number of years by subtracting the first and     ' second year.    years = endyrf - styrf        ' Look at the month and day values to make sure a full year has passed.     If stmonf > endmonf Then        years = years - 1    End If            If stmonf = endmonf And stdayf > enddayf Then        years = years - 1    End If    ' Make sure that we are not returning a negative number and, if not,     ' return the years.    If years < 0 Then        AgeFunc = "Invalid Date"    Else        AgeFunc = years    End If    End Function' This is a second function that the first will call.' It runs the Search worksheet function with arguments passed from AgeFunc.' It is used so that the code is easier to read.Public Function sfunc(x As Variant, y As Variant, Optional z As Variant)    sfunc = Application.WorksheetFunction.Search(x, y, z)End Function					
  5. 保存该文件。
  6. 键入以下数据:
    A1   01/01/1887A2   02/02/1945						
    在单元格 A3 中输入下面的公式
    = AgeFunc(startdate,enddate)
    其中 startdate 是对您的第一个日期 (A1) 的单元格引用,enddate 是您第二个日期 (A2) 的单元格引用。

    结果应该是 58。
: 检查之前 1/1/1900年的有效性的所有日期。由 Excel 不检查文本时输入的日期。

back to the top
参考
有关如何使用本文中示例代码的详细信息单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
212536如何运行知识库文章中的示例代码

back to the top
XL2000 xl2003 xl2007

属性

文章 ID:245104 - 上次审阅时间:01/25/2007 01:25:14 - 修订版本: 5.1

Microsoft Office Excel 2007, Microsoft Office Excel 2003, Microsoft Excel 2002 标准版, Microsoft Excel 2000 标准版

  • kbmt kbhowtomaster KB245104 KbMtzh
反馈
//c.microsoft.com/ms.js'><\/script>");