在我的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使用国际设置将字符串转换为日期。
有没有办法防止这种情况,依次说:
答案 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
它将处理如下输入:
天数,单个空格,月份为文本,单个空格,年份为数字