【问题标题】:Excel DATEVALUE function independent of international settingsExcel DATEVALUE 函数独立于国际设置
【发布时间】:2014-02-20 12:25:55
【问题描述】:

在我的 Excel 工作簿中,我从另一个(文本)源复制了一些日期信息。 为了能够对这些日期进行计算,我使用了函数“DATEVALUE”。

示例:单元格 A1 包含文本 20 february 2014,单元格 B1 包含公式 =DATEVALUE(A1)。 这按预期工作:我得到了自 1-1-1900 以来的天数,我可以用任何可以想象的日期表示法显示它。
到目前为止没有问题。尽管这不是英语中典型的日期表示法,但 DATEVALUE 将 february 识别为月份名称并采取相应措施。

现在,当我在具有不同国际设置(Windows 7:控制面板 -> 区域和语言 -> 格式)的计算机上打开此工作簿时,单元格 B1 出现 #VALUE 错误。只有当我将 A1 中的文本更改为 20 februari 2014(荷兰日期字符串,根据该 PC 上的国际设置)时,DATEVALUE 才会给出与以前相同的结果。

显然,DATEVALUE 使用国际设置将字符串转换为日期。

有什么办法可以防止这种情况发生吗?

  • 为了让Excel明白A1中的字符串是用英文写的, 不管 PC 上的国际设置是什么
  • 并将此字符串转换为日期,以便随后用于计算?

【问题讨论】:

  • 你可以写一个 UDF 总是返回日期,给定一个英文文本字符串,不管国际设置。

标签: excel date internationalization


【解决方案1】:

你可以试试这个公式:

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

日期总是按年、月、日的顺序接受参数

我承认日值始终是 2 位数字。

如果你不介意写下月份的缩写。在一个范围内,你可以得到一个更短的公式。

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

【讨论】:

  • 这个解决方案的好处是它只使用预定义的 Excel 函数。
  • 但是,它明确定义了 Excel 已经知道的内容:英文月份的名称。我想避免这种情况,例如只需要以某种方式指定字符串使用英文月份名称。
  • @henkv 从技术上讲,如果您运行的是英文版的 Excel,Excel 只知道月份的名称,这是整个问题的开始。
【解决方案2】:

试试下面的UDF

Public Function EngDate(s As String) As Date
    Dim dayz As Long, monthz As Long, yearz As Long
    ary = Split(LCase(s), " ")
    dayz = CLng(ary(0))
    yearz = CLng(ary(2))
    mnth = Split("january,february,march,april,may,june,july august,september,october,november,december", ",")
    For i = 0 To 11
        If ary(1) = mnth(i) Then
            monthz = CLng(i + 1)
            Exit For
        End If
    Next i
    EngDate = DateSerial(yearz, monthz, dayz)
End Function

它将处理如下输入:

日期为数字,单个空格,月份为文本,单个空格,年份为数字

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2019-08-05
    相关资源
    最近更新 更多