更改 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 参考