エクセルで小数位(ピリオド)と千単位(コンマ)の区切り文字を切り替えるマクロ

ここで書くまでもなく、日本では数字の表記法として、小数位を表すのに「ピリオド」を使用し、千単位を「コンマ」で区切っています。例えば、以下のようになります。
2016-04-13_1240

同じ数字でも、ブラジルでは「ピリオド」と「コンマ」の使い方があべこべになります。上記の数値は、以下のようになります。
2016-04-13_1240_001

日本での数字表記は世界共通ではない

インドネシアでも、ブラジルと同じ表記だったので、この数字の表記方法はブラジルに限ったことではないかもしれないと思い、調べたところ、多くの国でブラジルと同じ表記をしていることが分かりました。国際化対応言語環境の利用ガイド

日本語と同じ数字表記をしている国

イギリス、アメリカ、タイ

ポルトガル語と同じ数字表記をしている国

デンマーク、フィンランド、フランス、ドイツ、イタリア、ノルウェー、スペイン、スウェーデン、インドネシア

常識と思っていることが他の国では常識ではないことがある

ヨーロッパ諸国でも、ブラジルと同じ方法がスタンダードだということは知りませんでした。逆にブラジル人も、日本式の数字の表記の仕方を知らないので、アメリカ向けの書類などは訂正してもらうことがあります。

余談ですが、タックス・ヘイブン(TAX HAVEN)ヘイブンは、「天国」ではなくて、「避難所」ですよ、「天国」だなんて言ったら笑われますよ、という話を読んだことがありますが、ブラジルではしっかり、「Paraíso Fiscal(租税の天国)」という単語が当てられています。調べたところ、スペイン語やフランス語でも「天国」と言います。

頭痛の種になる数字表記

エクセルは、この「ピリオド」と「コンマ」の表記の違いを認識して、パソコンの利用言語に応じて自動で表示を変更してくれます。しかし、ブラジルのシステム等から出力したCSVファイルなどを利用する場合に問題が起こります。CSVファイルの場合、数値を「文字」として認識するため、日本のパソコンでファイルを開いた時に、自動変換してくれないのです。文字列として認識されていると、計算ができないですし、そのままでは使えません。

「ピリオド」と「コンマ」の区切り文字を変換するマクロ

2016-04-13_1240_002
このような場合に、「ピリオド」と「コンマ」の区切り文字をボタン一つで変換するマクロを作成しました。ぼくはこれを個人用マクロブックに保存しています。VBAのプロから見たら美しくないプログラムかもしれないですが、一応これで十分に機能します。

ユーザーフォームによる転記の際の問題

ここからは、もっとマニアックな話です。エクセルのユーザーフォームの「テキストボックス」に入力した数値を任意のシートに転記するというプログラムを組む場合を想定します。例えば、「A1」セルにテキストボックス(Textbox1)のデータを転記する場合、日本のパソコンだと以下のプログラムで機能します。

Range(“A1”).Value=Textbox1.Value

しかし、同じプログラムをブラジルのパソコンで走らせた場合、転記された数字が「文字列」になってしまうんです。VAL関数などを使用して、文字列を数値に変換しようとしたのですが、VAL関数は「コンマ」以降の数値を認識しないので、数字が整数ではない場合には役に立ちません。

日本語で検索しても解決策は一向に見つからなかったのですが、試しにポルトガル語で検索してみたら、まさに求めていた解決策がみつかりました。前述したプログラムですが、ブラジルのパソコンでも数値として認識するためには、次のように記述すべきだったのです。

Range(“A1”).FormulaLocal = Textbox1.Value

マニアックな話ですが、ブラジル人に利用してもらうためのアプリをエクセルVBAで作成する場合には、重要なポイントです。

2016-04-13_1241

サンプルプログラム