更改 Microsoft Office Excel 中 TEXT 函数的语言格式

Posted

技术标签:

【中文标题】更改 Microsoft Office Excel 中 TEXT 函数的语言格式【英文标题】:Change the Language format of TEXT function in Microsoft Office Excel 【发布时间】:2017-04-21 12:38:25 【问题描述】:

我在网上搜索了很多,但我找不到以下问题的解决方案:

在单元格 A1 中,我插入了一个日期。

例如42736,(即 2017 年 1 月 1 日)。

在单元格 B1 中,我想显示以下内容:

"The result is: January 2017"

在单元格B1中,公式为:

="The result is: " &TEXT(A1;"MMMM YYYY")

但是,因为我的电脑是德语区域格式,所以我有以下两个问题:

1) 月份的名称是德语而不是英语

2) 它不理解 YYYY。

对于第二个问题,我找到了创建以下UDF的解决方案:

' standard date format regardless of excel language
Public Function STDTEXT$(ByVal Value, ByVal strFormat)
    STDTEXT = VBA.Format$(Value, strFormat)
End Function

问题

有没有办法克服第一个障碍?

无论用户的本地区域设置如何,我都想以英文返回月份名称。

问候

死亡

【问题讨论】:

我不想将我的整个系统更改为多种区域语言进行测试,所以你可以试试=text(a1, "[$-x-sysdate]mmmm yyyy")。这使用来自单元格格式的通用语言格式掩码。 您也可以尝试在 B1 中使用此单元格格式掩码:\T\h\e\ \r\e\s\u\l\t\ \i\s\: [$-x-sysdate]mmmm yyyy,然后将 =A1 简单地放在 B1 中。 上述建议的两个问题:假设例如德语设置也有必要使用本地化形式 sysdat 而不是 sysdate,JJJJ 而不是 YYYY,即 ="=TEXT(A1; ""[$-x-sysdat]MMMM JJJJ"")" 以接受本地化结果,例如“...:2017 年 1 月” 【参考方案1】:

您可以使用创建外部表D1:E12

1   January
2   February
3   March
4   April
5   May
6   June
7   July
8   August
9   September
10  October
11  November
12  December

然后使用:

="The result is: "&VLOOKUP(MONTH(A1),$D$1:$E$12,2,FALSE)&" "&YEAR(A1)

【讨论】:

我考虑过那个解决方案,但我正在寻找一个更通用的解决方案,它也适用于 MMM。 聪明的想法,但 Excel i 这么多翻译的格式字符串仍然不可能在不同的语言环境中有所不同 发布了一个(迟到的)答案如何获得独立于区域设置的英文月份名称,并且仅基于单个范围参考,而不是另外使用本地化格式模式:-) 【参考方案2】:

对于第一个问题,我使用了以下解决方法

在单独的字段/工作表中创建语言检查:

单元格A1: =NA() - 只需在单元格中插入#N/A

单元格A2: =FORMULATEXT(A1) - 将=NA() 函数转换为纯文本

单元格A3:=IF(A2="=NA()", "English", IF(A2="=NV()", "German", "Other")) - 打开文件时,Excel 会自动将函数转换为安装的语言,英语 NA 变为 NV (nicht verfügbar),单元格显示德语。

进一步在日期单元格B1 我使用=IF($A$3="English", "DD.MM.YYYY", IF($A$3="German", "TT.MM.JJJJ", "ERROR (Language must be English or German"))

(尽管如果用户在 Windows 和 Excel 中使用相同的语言,则此解决方案有效)。

【讨论】:

【参考方案3】:

通过 UDF 调用的示例

此方法演示了如何获取独立于区域设置的英文月份名称,并且仅基于单个范围引用,而不是另外使用本地化格式模式。

带单元格公式

="The result is " & endate(A1)

one 获取 A1 中日期值的英文月份名称,与区域设置无关:

"The result is: January 2017"

用户定义函数EnDate()

Function EnDate$(dat#)
' Purpose: return English month name plus year
' Note:    international codes ("patterns") at https://msdn.microsoft.com/en-us/library/dd318693(VS.85).aspx
  Const EN = 409
  EnDate = Application.Text(DateSerial(6, Month(dat), 1), "[$-" & EN & "]mmmm") & " " & Year(dat)
End Function

相关链接

How to create a calendar Input in VBA Excel

【讨论】:

以上是关于更改 Microsoft Office Excel 中 TEXT 函数的语言格式的主要内容,如果未能解决你的问题,请参考以下文章

无法将“microsoft.Office.Interop.Excel.ApplicationClass”类型的 COM 对象转换为“microsoft.Office.Interop.Excel.App

无法添加对 microsoft.office.interop.excel 的引用

添加 Microsoft.Office.Interop.Excel 参考

NPOI写Excel,Microsoft.Office.Interop.excel.dll 转换Excel为PDF

Microsoft office 2016产品密钥

如何引用 Microsoft.Office.Interop.Excel dll?