Horizontal vs Vertical array delimiters - International

假装没事ソ 提交于 2021-02-18 10:19:18

问题


Following up on an earlier question I had about horizontal vs vertical arrays, I have a question about it's respective delimiters.

Problem definition:

Hereby an example of an incorrect way of comparing two arrays:

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

The correct way, in case of an English application countrycode would be:

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

Within an English version (most likely more than just English) of Excel these delimiters would respectively be a comma , for horizontal arrays and a semicolon ; for vertical ones. Plenty of online information to be found on this.

Working on a machine with a Dutch country code on it's application however, it't a complete other story. It does frustrate that my delimiters would both be different, respectively ; and a \. Being able to rather simply retrieve the semi-colon it's proven to be tricky to find any documentation on these delimiters for international version.

Workaround:

Not knowing these delimiters up-front makes it tricky for anyone on a variety of international versions of the application to work with these type of formulas. A rather easy workaround would be to use TRANSPOSE():

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

Going through the build-in evaluation we can then retrieve the backslash as the column seperator. Another way would be to use the Application.International property and it's xlColumnSeparator and xlRowSeparator.

Question

We can both find and even override the xlDecimalSeparator and xlThousandsSeparator through Excel (File > Options > Advanced), or VBA (Application.DecimalSeparator = "-") but where can we find:

  • A place to actually see which xlRowSeparator and xlColumnSeparator are used within your own application, other than the workarounds I described. Looking for an interface similar to thousands and decimal seperator and/or official MS-documentation.

Furthermore (not specifically looking for this), is there:

  • A place to override them just like the decimal and thousand seperators
  • If not through Excel interfaces, can we brute-force this somehow through VBA?

I'm very curious if official documentation is present, and/or if the above can be done.


回答1:


Not claiming this is the right answer, but with the help from comments from other users, maybe the below can clarify things a bit:

With no sign of any official documentation on this matter, and seemingly random row and column delimiters @Gserg showed a trick to retrieve information for any LCID using these unique id's on MS office support under "Create one-dimensional and two-dimensional constants". While this is MS office support information, the delimiters you see there are FALSE. They might come up as . a , a ; a : a \ or even a |. You get this results by changing the LCID from the URL to a LCID of interest, e.g.: fr-fr.

Although there are about 600 different LCID's they all get redirected to a default LCID. With the help of @FlorentB. we discovered that not only the MS office support documentation is wrong, it seems that these delimiters are not that random after all. Looking at countries using a decimal point, they use the , as a column delimiter (a horizontal array) and a ; as a row delimiter (a vertical array). Countries using a decimal comma however use a \ as a column delimiter and a ; for rows respectively.

Changing the system country settings, checking all default LCID's in Excel, we ended up with the matrix below showing all row and column delimiters per default 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 | ;   | ,      |

The apparent conclusion is that all countries use a semicolon as a row (vertical) delimiter. And depending on decimal seperator countries use a backslash or comma as a column (horizontal) delimiter within array formulas.

So even without proper MS-documentation, nor a place within the Excel interface (like thousand en decimal delimiter do have), on this matter it is apparent that knowing your country's decimal seperator will automatically mean you either use a \ or , as a column delimiter.

| Dec_Seperator | Row | Column |
|---------------|-----|--------|
| .             | ;   | ,      |
| ,             | ;   | \      |

I would happily recieve more information about the above and/or presence of any correct MS office documentation to add to this.



来源:https://stackoverflow.com/questions/57120417/horizontal-vs-vertical-array-delimiters-international

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!