Excel DATEVALUE函数独立于国际设置

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

示例:单元格A1包含文本20 february 2014 ,单元格B1包含公式=DATEVALUE(A1) 。 这是按预期工作的:我得到了自1 – 1900年以来的天数,我可以在任何可以想象的date符号中显示。
到目前为止没有问题。 即使这不是英语中典型的date符号,DATEVALUE也会将二月份识别为月份名称并作出相应的处理。

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

显然,DATEVALUE使用国际设置从string转换为date。

为了防止这种情况,有一些方法可以说:

  • 让Excel了解A1中的string是用英文写的,不pipePC上的国际设置是怎样的
  • 并将这个string转换为一个date,然后可以在计算中使用?

你可以试试这个公式:

 =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)) 

date总是按照年,月,日的顺序进行

我承认那天的价值总是2位数。

如果你不介意写几个月的abrev。 在一个范围内,那么你可以得到一个更短的公式。

根据您的地区设置,您可能需要更换字段分隔符“;” 按“,”

试试下面的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 

它将处理如下input:

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