我尝试使用一个文本字符串,其中包含一个带有.
小数分隔符和两个小数位的数字,与用户所拥有的 Excel 的语言环境无关。
当它只是英文时,=TEXT(A1, "0.00")
工作正常,并且1.00
当我1
用A1。但是,当我在 Excel 设置为德语的本地电脑上打开它时,出现错误#VALUE!
。
有没有办法使其独立于 Excel 所设置的语言,因为有来自不同国家和公司的多个人在工作/查看同一个 Excel 文件。
我无法使用 VBA。
答案1
由于没有 VBA 就不可能实现与本地无关的格式化,因此您或许可以调整 Excel 代码以使其适合多语言环境。
这个想法是使用 查找 该值将根据系统语言而改变。
下面的示例将使用一月份的当地名称来标识日期字段的格式是英语还是德语:
=VLOOKUP(TEXT(1,"MMMM"),{"January","yyyy-MM-dd";"Januar","jjjj-MM-tt"},2,FALSE)
在英语中这个月份被称为“January”,但在德语中则是“Januar”。
我们对下面的参数数组执行 VLOOKUP 以获取正确的格式字符串:
"January" , "yyyy-MM-dd" ;
"Januar" , "jjjj-MM-tt"
您还可以在单元格中存储适合语言环境的正确格式字符串,并在此数据类型的所有 TEXT 函数中使用该值,而不必在每个函数上重复 VLOOKUP 调用。
(此答案基于 StackOverflow 帖子 Excel 中与区域设置无关的文本函数。
答案2
您可以使用 VBA 和数字格式文本字符串的命名引用来执行此操作。
然后,我们根据用户的区域设置更改该命名引用,使其与所需的格式字符串相对应。
在你的美国版本中,
- 导航
Formulas => Define Name
- 我使用:
_2Dec
作为名称,并"0.00"
使用RefersTo
- 我使用:
- 将您的公式更改为
=TEXT(A!,_2Dec)
Alt-F11
打开 VB 编辑器- 在项目资源管理器中,选择引用您的工作簿的项目
- 在该项目中,右键单击
ThisWorkbook
并选择View Code
将以下代码粘贴到打开的窗口中
Option Explicit
Private Sub Workbook_Open()
Dim DecSep As String
DecSep = Application.International(xlDecimalSeparator)
On Error Resume Next 'Avoid error in case someone deleted this named reference
ThisWorkbook.Names("_2Dec").Delete
On Error GoTo 0
ThisWorkbook.Names.Add Name:="_2Dec", RefersTo:="=""0" & DecSep & "00"""
End Sub
我知道RefersTo
带有这些双引号的参数看起来很奇怪,但它们是必要的,因为引号是 RefersTo 参数的一部分。
代码在工作簿打开时运行,并根据用户机器上使用的小数分隔符改变引用。