Excel DATEVALUE函数独立于国际设置

时间:2014-02-20 12:25:56

标签: excel date internationalization

在我的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上的国际设置是什么
  • 并将此字符串转换为日期,以后可以在计算中使用?

2 个答案:

答案 0 :(得分:2)

您可以尝试以下公式:

=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位数。

如果你不介意写几个月abrev。在某个范围内,您可以获得更短的公式。

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

答案 1 :(得分:0)

尝试以下 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

它将处理如下输入:

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