我需要在excel中设置日期格式,而我正在尝试使用TEXT
公式。问题在于,当语言环境更改时,Excel对参数的解释也会更改。
例如:如果我在A1单元格中有一个想要转换为文本的日期,则采用年-月-日格式,如果我的PC上有英文,则必须使用=TEXT(A1, "yyyy-mm-dd")
-language语言环境,但是如果=TEXT(A1, "jjjj-MM-tt")
具有德语语言环境,则为M
(我不告诉你,=TEXT(YEAR(A1), "00") & "-" & TEXT(MONTH(A1), "00") & "-" & DAY(A1)
必须为大写)。这使文档不可移植。 (第二个参数是纯文本,因此在更改语言环境时不会转换。)
备注:
这只是一个例子,我知道在这种情况下我可以做长create table as
。我想知道更一般的情况。
日期不应该只是以某种格式显示,它实际上应该是一个字符串。对于查看文件的人来说,这没有什么区别,但是在其他公式中使用它时,它会有所不同。
我可以在VBA中编写UDF来解决此问题,但是在本文档中我无法使用VBA。
我不在乎更改月份等的名称。没关系,如果月份的名称是6月或6月,则取决于地区。
非常感谢
答案 0 :(得分:1)
这是一个有点作弊的方法:对将根据您的系统语言而更改的值使用VLOOKUP
-例如TEXT(1,"MMMM")
=VLOOKUP(TEXT(1,"MMMM"),{"January","yyyy-MM-dd";"Januar","jjjj-MM-tt"},2,FALSE)
英语:Text(1,"MMMM") = "January"
,因此我们在下面的数组上执行VLOOKUP
以获取“ yyyy-MM-dd”
"January" , "yyyy-MM-dd" ;
"Januar" , "jjjj-MM-tt"
Auf Deutsche,Text(1,"MMMM") = "Januar"
,还有SVERWEIS
先生,也可能是“ jjjj-MM-tt” zu erhalten! :)
然后,只需在您的TEXT
函数中使用它即可:
=TEXT(A1, VLOOKUP(TEXT(1,"MMMM"),{"January","yyyy-MM-dd";"Januar","jjjj-MM-tt"},2,FALSE))
很明显,此方法有效的主要原因是TEXT(1,"MMMM")
对德语和英语均有效。如果您使用的是菲律宾语(其中“月”为“ Buwan”),则在查找可相互理解的格式输入时可能会遇到一些问题。
答案 1 :(得分:0)
我发现了另一种可能性。它并非在所有情况下都是完美的(请参阅下文),但它也可以与数字格式一起使用,从而不受区域限制。由于混合语言版本存在相同的问题。
为此,您可以在vba中创建自己的函数。用 Alt + F11 打开开发人员工具,然后创建一个新的模块文件。在模块文件内部粘贴以下内容:
Function FormatString(inputData, formatingString As String) As String
FormatString = Format(inputData, formatingString)
End Function
然后,您可以在带有英语格式字符串的单元格公式中使用它。喜欢:
= FormatString(A1; "yyyy-mm-dd")
优点:它也适用于数字格式:
= FormatString(A1; "00.00")
如果(例如德国),您的小数点分隔符不是.
缺点:
1与TEXT
函数不相同
这并非总是可以预期的与日期格式一起使用,并且与TEXT
函数并不完全相同:
FormatString(1; "MMMM")
不返回“ January”,而是“ December”,因为以1作为日期。类似于31.12.1899。
2必须与宏一起保存
您必须将文件另存为* .xlsm才能工作
答案 2 :(得分:-1)
简单的解决方法,无论是直接自定义单元格格式还是使用TEXT(),都是使用一种国家/地区代码作为一种您知道正确的格式代码的语言。
例如,我在美国,有一个美国版本的Excel,并且熟悉其日期代码格式。因此,我想使用它们并确保不管任何人的Windows或Excel版本,或它们所在的国家/地区,它们都“出来”,我会像下面这样(对于TEXT()来说,在自定义格式中是相同的想法):
=TEXT(A1,[$-en-US]"yyyy-mm-dd")
该函数将收集A1中的值,要求Excel将其视为日期,Excel会并且会说很好,这很酷(即:该值是43857,而不是“马”),因为它是一个正数,这是将任何东西都视为日期的要求,然后让该函数继续以规定的方式将其呈现为日期。而不是给出一个#ERROR!就像“马”或-6一样。
然后,该函数将读取格式字符串并查看语言代码。然后,它将删除启动时加载的通常的一组格式代码,并加载英语(“ en”),尤其是美国英语(“ US”)的格式代码。字符串的其余部分使用该集合中的代码,因此它将正确解释它们,并将适当的字符串发送回TEXT()以便在单元格中显示(如果存在,则传递给其他公式)。
我无法测试以下内容,但我假设如果使用显示星期几名称或月份名称的格式,那么它们将来自相同的语言集。换句话说,即使您指定了仍想要的国家和语言(例如,荷兰语或刚果语月份名称),Excel也不会认为。因此,仍然需要解决这类问题,但这也很容易解决,例如,可以添加一个简单的查找,尽管这很“有趣”,但可以为每个要适应的语言设置查找表。
但是,一般而言,使用国家/地区代码非常容易解决此问题所引起的基本问题。现在,[$-409]语法已被[$ -en-us]和[$ -he-IL]之类的东西替换,它们甚至不再困难或不可思议。
答案 3 :(得分:-2)
选择相应的单元格。转到格式->数字->日期。从列表中选择适合您的内容。您甚至可以创建自己的自定义格式。
使用文本功能:
=TEXT(date,format)
在不同版本的Excel(以不同的语言)之间进行迁移应该不成问题,因为Excel会为您完成转换。
但是,在发布文件之前,您需要首先进行验证-希望您有两种不同语言的2个版本的Excel。
我确定对函数名称(IF <->ЕСЛИ<-> WENN)完成了此操作。我不确定格式说明符。
要指定要为哪种语言环境准备文本,请使用以下公式:
=TEXT(A1,"[$-409]mmmm, yyyy")
其中括号中的代码是国家/地区代码。
有关代码列表,请阅读此page。
我不知道在Excel中以其他语言打开时该功能如何保持“安全”。