Excel中与语言环境无关的文本函数

时间:2019-07-05 10:26:33

标签: excel

我需要在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月,则取决于地区。

非常感谢

4 个答案:

答案 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)

选择相应的单元格。转到格式->数字->日期。从列表中选择适合您的内容。您甚至可以创建自己的自定义格式。

enter image description here


使用文本功能:

=TEXT(date,format)

在不同版本的Excel(以不同的语言)之间进行迁移应该不成问题,因为Excel会为您完成转换。

但是,在发布文件之前,您需要首先进行验证-希望您有两种不同语言的2个版本的Excel。

  • 将工作文件保存为一个版本;
  • 使用其他语言的Excel将文件复制到另一台计算机上;
  • 打开文件-公式应更新。

我确定对函数名称(IF <->ЕСЛИ<-> WENN)完成了此操作。我不确定格式说明符。


要指定要为哪种语言环境准备文本,请使用以下公式:

=TEXT(A1,"[$-409]mmmm, yyyy")

其中括号中的代码是国家/地区代码。

有关代码列表,请阅读此page

我不知道在Excel中以其他语言打开时该功能如何保持“安全”。