excel中无独立的文本函数



我需要在Excel中格式化日期,并且我正在尝试使用TEXT公式。问题在于,当该语言环境变化时,Excel对参数的纵向发生了变化。

例如:如果我在单元格A1中有一个日期,我想转换为文本,在年度月份中,我必须使用=TEXT(A1, "yyyy-mm-dd"),如果我的PC具有英语语言环境,但是=TEXT(A1, "jjjj-MM-tt")(我不骗你,如果M必须是大写(,如果它具有德语语言环境。这使该文档无法公开。(第二个参数是纯文本,因此在更改语言环境时不会转换。(

备注:

  • 这只是一个例子,我知道在这种情况下我可以做长=YEAR(A1) & "-" & TEXT(MONTH(A1), "00") & "-" & TEXT(DAY(A1), "00")。我想知道更一般的情况。

  • 日期不仅应以某种格式显示实际上应该是字符串。对于查看文件的人,这不会有区别,但是在其他公式中使用它时,它会。

  • 我可以在VBA中编写一个UDF来解决问题,但是我不能在本文档中使用VBA。

  • 我不在乎更改月份的名称。

  • 我想强调,问题是由于PC的语言环境而发生的 - 不是由于MS Office版本的GUI语言。在上面的示例中,Excel的GUI和公式在这两个示例中都是英文的。我刚刚更改了机器上的位置。

非常感谢

这是一种有点欺骗的方法:在将根据您的系统语言更改的值上使用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",也是Wir Machen Einen SVERWEIS AUF DEM ARRAY ARAY OBEN,UM" JJJJJ-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"(,那么您可能会发现一些问题找到相互理解的格式输入。

i发现了另一种可能性。在所有情况下,它并不是完美的(请参见下文(,但它也适用于数字格式,独立于语言环境。因为我在混合语言版本上也有同样的问题。
为此,您可以在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")

不返回" 1月",而是"十二月",因为1被视为日期。大约31.12.1899。

2必须用宏

保存

您必须将文件保存为 *.xlsm才能工作

注释(1(:这仅回答与区域无关的文本的情况,以格式化具有小数符号和数字分组符号的格式数字。有关日期格式,请参见Chronocidal的答案。
注意(2(:此答案不使用VBA功能,这将需要启用宏。根据公司的安全政策,可能无法实现宏。如果可以选择启用宏,则Uwe Hafner的答案会更容易。


您可以如下检测十进制符号和数字分组符号。在特定单元格(例如A1(中输入数字1,在另一个单元格中输入数字1000(例如A2(。

  • 十进制符号:=IF(TEXT(INDIRECT("A1"),"0,00")="001",".",",")
  • 数字分组符号 1 =IF(TEXT(INDIRECT("A2"),"#,###")="1000,",".",",")

这是假设小数符号为 .,,而数字分组符号分别为 ,.。这将无法检测出异常的数字分组符号,例如 (Space(或'(Apostrophe(。

有了这些信息,您可以设置一个具有公式的公式,该公式会导致您需要应用的格式代码。

假设您需要将数字格式化为两个小数位数并使用数字分组符号。您可以假设,如果十进制符号为 .,则数字分组符号将为,,反之亦然。您可以执行以下操作:

  • A1:1
  • A2(格式字符串(:=IF(TEXT(INDIRECT("A1"),"0,00")="001","#,##0.00","#.##0,00")
  • A3(包含您希望格式化的任意号码(
  • A4(格式编号(:=TEXT(A3,A2)

技术说明:INDIRECT功能是故意使用的,因为它是 volatile 函数。这可以确保将格式字符串和依赖于其的任何内容都重新计算,即使在Excel文档中没有更改数据。如果未使用INDIRECT,则Excel缓存结果,并且在具有不同语言环境设置的PC上打开Excel文档时不会重新计算格式字符串。

1-也称为千分隔

易于修复,是否直接自定义格式化单元格或使用text((,是为您知道适当格式的代码的语言使用乡村代码。

例如,我在美国,拥有Excel的美国版本,并且熟悉其日期代码格式。因此,我想使用它们,并确保它们"出来"。无论任何人的窗户或Excel版本或他们所在的国家/地区,我都会像以下内容一样(对于文本((,可以说,但这在自定义格式中是相同的想法(:

=TEXT(A1,[$-en-US]"yyyy-mm-dd")

该功能将在A1中收集该值,要求Excel作为日期对待,Excel会并且会说很好,它很酷(即。一个正数,是任何将任何东西都视为日期的要求,并让该功能继续以规定方式将其作为日期渲染。而不是给#Error!就像"马"一样或-6。

该功能将读取格式字符串并查看语言代码。然后,它将放弃在启动时加载的通常的格式化代码,并以英语的格式代码('en&quot of Us English("我们("(" US"(。该字符串的其余部分使用该集合的代码,因此它可以正确解释它们,并将适当的字符串发送回Text((以供其显示在单元格中(如果存在的话,并将其传递到其他公式(。

我无法测试以下内容,但是我认为,如果要使用显示一周的名称或月份名称的格式,它们将来自同一语言集。换句话说,Excel不会认为即使您指定了仍然想要的国家和语言,例如荷兰或刚果月的名字。因此,这种事情仍然需要解决,但仅仅涉及一个简单的查找也可以添加的一个简单的修复,尽管它可以添加"有趣"为每种想要适应的语言设置查找表...

然而,总体而言,由于这个国家的代码,这一问题总体上出现的基本问题非常容易解决。既然[$ -409]语法已被[$ -en-us]和[$ -He-il]等替换,那么它们甚至不再难。>

最新更新