水平数组定界符与垂直数组定界符-国际

时间:2019-07-19 22:57:06

标签: excel vba excel-formula

紧跟在我之前的question上,关于水平数组与垂直数组,我对它各自的分隔符有疑问。

问题定义:

下面是一个比较两个数组的错误方法的示例:

{=SUMPRODUCT(--({"Apple","Pear"}={"Apple","Lemon","Pear"}))}

在使用英语应用国家/地区代码的情况下,正确的方法是:

{=SUMPRODUCT(--({"Apple","Pear"}={"Apple";"Lemon";"Pear"}))}

在Excel的英语版本中(很可能不仅仅是英语),这些定界符分别对于水平数组是逗号,,对于垂直数组是分号;。在此可以找到大量在线信息。

在应用程序上使用荷兰国家/地区代码的机器上工作,但这并不是一个完整的故事。令人沮丧的是,我的定界符都不同,分别为;\。能够很容易地检索分号,事实证明在这些国际化分隔符上找到任何文档都是很棘手的。

解决方法:

如果不预先知道这些定界符,那么使用该应用程序的各种国际版本的任何人都很难使用这些类型的公式。一个相当简单的解决方法是使用TRANSPOSE()

{=SUMPRODUCT(--({"Apple";"Pear"}=TRANSPOSE({"Apple";"Lemon";"Pear"})))}

在进行内置评估之后,我们可以将反斜杠用作列分隔符。另一种方法是使用Application.International property,分别是xlColumnSeparatorxlRowSeparator

问题

我们可以通过Excel(“文件”>“选项”>“高级”)或VBA(xlDecimalSeparator)查找甚至覆盖xlThousandsSeparatorApplication.DecimalSeparator = "-",但是在哪里可以找到:

  • 一个实际查看您自己的应用程序中使用了xlRowSeparatorxlColumnSeparator的地方,除了我所描述的解决方法。寻找类似于千位分隔符和/或官方MS文档的界面。

此外(不是专门针对此内容)位于此处:

  • 像小数点和千位分隔符一样覆盖它们的地方
  • 如果不通过Excel界面,是否可以通过VBA以某种方式强行执行此操作?

我很好奇是否提供了官方文档,并且/或者是否可以进行上述操作。

1 个答案:

答案 0 :(得分:3)

关于此问题,没有任何正式文档的迹象,而且看似随机的行和列分隔符@Gserg显示了一种技巧,该技巧使用“下MS office support上的这些唯一ID检索任何LCID的信息,维和二维常数” 。尽管这是MS Office支持信息,但您看到的定界符为FALSE。它们可能以.,;:\甚至是|的形式出现。通过将LCID从URL更改为感兴趣的LCID,例如fr-fr,可以得到此结果。

尽管大约有600个不同的LCID,但它们都被重定向到默认的LCID。在@FlorentB的帮助下。我们发现不仅MS Office支持文档是错误的,而且看来这些分隔符毕竟不是那么随机。使用小数点查看countries时,他们将,用作列定界符(水平数组),将;用作行定界符(垂直数组)。但是,使用小数逗号的国家/地区将\用作列定界符,将;用作行。

更改系统国家/地区设置,在Excel中检查所有默认的LCID,最后得到下面的矩阵,其中显示了每个默认LCID的所有行和列定界符:

| LCID  | Row | Column |
|-------|-----|--------|
| ar-sa | ;   | ,      |
| bg-bg | ;   | \      |
| cs-cz | ;   | \      |
| da-dk | ;   | \      |
| de-de | ;   | \      |
| el-gr | ;   | \      |
| en-gb | ;   | ,      |
| en-ie | ;   | ,      |
| en-us | ;   | ,      |
| es-es | ;   | \      |
| et-ee | ;   | \      |
| fi-fi | ;   | \      |
| fr-fr | ;   | \      |
| he-il | ;   | ,      |
| hr-hr | ;   | \      |
| hu-hu | ;   | \      |
| id-id | ;   | \      |
| it-it | ;   | \      |
| ja-jp | ;   | ,      |
| ko-kr | ;   | ,      |
| lt-lt | ;   | \      |
| lv-lv | ;   | \      |
| nb-no | ;   | \      |
| nl-nl | ;   | \      |
| pl-pl | ;   | \      |
| pt-br | ;   | \      |
| pt-pt | ;   | \      |
| ro-ro | ;   | \      |
| ru-ru | ;   | \      |
| sk-sk | ;   | \      |
| sl-si | ;   | \      |
| sv-se | ;   | \      |
| th-th | ;   | ,      |
| tr-tr | ;   | \      |
| uk-ua | ;   | \      |
| vi-vn | ;   | \      |
| zh-cn | ;   | ,      |
| zh-hk | ;   | ,      |
| zh-tw | ;   | ,      |

显而易见的结论是,所有国家/地区都使用分号作为行(垂直)分隔符。根据小数点分隔符的不同,国家/地区会在数组公式中使用反斜杠或逗号作为列(水平)分隔符。

因此,即使没有正确的MS文档,也没有在Excel界面中放置任何位置(就像千位小数分隔符一样),显然,知道您所在国家的小数点分隔符将自动意味着您要么使用{{1 }}或\作为列定界符。

,

我很乐意收到有关以上内容和/或存在任何正确的MS Office文档的更多信息。