{=B2*C2 \# "-#.##0,00"}
Word の表に、簡単な関数 があります。しかし、2.345,67
私はオランダに住んでいるので、この関数は という結果を返します。今、この文書を英語圏の同僚と共有する必要があり、そのような数式 (たくさんあります) の書式設定を 、2,345.67
つまり英国または米国のロケールとして表示したいと考えています。 を使用することでこれを実現できます{=B2*C2 \# "-#.##0,00"}
が、その場合、文書の 2 つのバージョンを維持し、各フィールドを更新する必要があります。
私はロケールを何らかの方法で中央集権的に設定できる方が好きですが、文書のロケールを設定したり、校正ツールを使って設定したりしても役に立ちません。この提案つまり、英語のようなロケールを使用すると\l 2057
、構文エラーが発生します。
書式設定文字列を手動で変更することはできますが、言語設定を使用することを好みます。同じことは読み取られるフィールドには当てはまりません。フィールドを変更して、B2
小数点にコンマではなくドットを使用するようにすると、正しく計算されません。
コンピュータ全体のロケールを変更すると効果がありましたが、これは長期的な解決策ではありません。
答え1
この分野には数多くの問題があり、そのどれもが特に簡単に解決できるものではありません。
いくつかの点では、主な問題は、あなたが実際に説明したもの、つまり書式設定が機能しないというものではなく、ユーザーが表に数字を入力すると、それが「固定」される、つまりあなたが入力した後に、
1234,56
Wordにはそれを変更するための完全に信頼できるメカニズムがありません
1234.56
また、Windows コントロール パネルで小数点文字が「.」に設定されているか「,」に設定されているかによって、Word は数値を異なる方法で認識します。
そのような値のない(空のセルのみの)ドキュメントを作成する場合そして「フォーム」を米国/英国のユーザーに送信し、値を入力します。そしてその後、英国/米国のユーザーのみが使用できるようになります。実行できる操作がいくつかあります。
そうでなければ、私の知る限り、ユーザーに非常に不自然な方法でデータを入力させるか、ユーザーが1234.56と入力した時点で入力するか、すべての数字を他の文化の形式に簡単に変換できるようにする必要があります。最も簡単な方法は、ワイルドカード検索/置換を使用して、次のようなものを置き換えることです。
([0-9]),([0-9])
に
\1.\2
(またはその逆)、数字のように見える他のものが変更されないことを前提としています。おそらく、それを VBA マクロでラップする必要があるでしょう。
書式設定スイッチに関しては、これに対処する唯一の本当に信頼できる方法は、それらを使用しないこと、そして Word がデフォルトで数値を書式設定する方法に完全に依存することです。(参考までに、Word の数値書式に「#」プレースホルダーを入れる人は、Excel の経験があり、それが必要ないということに気付いていないことが時々あります)。
ただし、数値形式を使用する必要がある場合は、正しい「小数点」と「千単位の区切り」文字を形式に取り込む必要があります。つまり、ドキュメントを編集しているマシンの Windows コントロール パネルで使用されているのと同じ文字を使用するということです。
フィールドを使用してこれを行う完全に信頼できる組み込みの方法はありません。 VBA を使用して、Windows から関連する文字を取得できます。 または、次の行に沿ってネストされたフィールドを使用して「偽装」を試すこともできます。
{ IF 1/2 = 0,5 "{ SET POINT "," }{ SET GROUP "." }" "{ SET POINT "." }{ SET GROUP "," }" }
(覚えておいてください全て{ } は、Windows デスクトップの Word で Ctrl + F9 を使用して挿入できる特殊なフィールド コード中括弧のペアである必要があります)
その代わりに
{=B2*C2 \# "-#.##0,00"}
あなたが使う
{=B2*C2 \# "-#{ GROUP }##0{ POINT }00"}
あるいは、文書の冒頭でフォーマットを定義することもできます。例:
{ SET FORMAT1 "-#{ GROUP }##0{ POINT }00" }
次に使用する
{=B2*C2 \# "{ FORMAT1 }"}
明らかに、このアプローチは、任意のロケール (たとえば、一部のロケールでは、千単位の区切りとして改行なしのスペース文字を使用します) やコントロール パネルの異常な設定には対応しませんが、NL/US/UK には十分な場合があります。
残念ながら、これは「簡単に」解決できる問題です。実際に必要なのは、Windows の設定に関係なく、すべてのユーザー (NL/UK/US) が同じフォーマットで入力して表示されるようにすべてを修正することである場合、これは実際には解決するのがはるかに難しい問題です。たとえば、すべてのユーザーが US フォーマットで入力して表示されるようにすると決めたとします。1,234,567.89
問題は、一般的な NL 設定でセットアップされたシステムでは、Word が「1234.56」を正しく認識しないということです。この問題に対処するために実行できる唯一の方法は (私の意見では) 次のとおりです...
a. ユーザーが入力するデータを避けるか、ユーザーが整数データのみを入力するように制限する
b. セキュリティ制限によって禁止されていない場合は、VBA などを使用して、ユーザーのシステム上の関連する Windows 設定を一時的に変更します。
どちらかの選択肢に対して解決策を提供する価値があるかどうかさえわかりません。
ただし、この問題に対する汎用的なソリューションで考慮する必要がある可能性のある事項のいくつかを次のようにリストすることは価値があるかもしれません。
基本的な問題は、Word の数値書式設定が主に Windows の設定/コントロール パネルの設定に依存していることです。実際、Word の実装は非常に古いため、それらの設定のいくつかしか尊重されません。たとえば、コントロール パネルでの設定に関係なく、数字は 3 桁ずつグループ化されます。すでにおわかりのように、などのロケール スイッチを使用したり、
\l 2057
校正言語を適用したりして数値の表示に影響を与えることはできません (校正言語は日付に対してはある程度機能します。校正言語を適用できたとしても、変更方法を理解する必要があります)。Word のデスクトップ版とオンライン版は動作が異なります。私の知る限り、現時点では、Word の Web 版はロケール設定に関係なく、フィールド結果をそのまま残します。もちろん、これは時間の経過とともに変わる可能性があり、Word の「デバイス」版は動作が異なる場合があります。Mac デスクトップ版は Windows 版とほぼ同じように動作しますが、Mac の設定を変更するには、Windows 版とは異なるコードが必要になります。
「フォーマット」の問題だけではありません。「数字をどうやって入力するか」という問題や「認識」の問題もあります。
数値書式文字列には、オーバーライドWindows コントロール パネルの値を使用するか、Windows コントロール パネルで指定された値を使用するように指定することもできます。
私が言いたいのはオーバーライド次のようなことはできないということです
{ DECIMAL "." }{ =10000/3 \# "###0<decimal>00" }
WordはいつもWindows の設定に関係なく、小数点として「.」を使用します。
「Windowsのコントロールパネルで指定された値を使用する」とは、次のような形式を入力することを意味します。
#,##0.00
「,」が実際に Windows 設定の小数点文字である場合、書式文字列全体が期待どおりに動作することはできません。
おそらく次のようなものを使いたいでしょう
#<thousands>##0<decimal>00
ここで、Word は実際には Windows コントロール パネルから と の値を取得します。
VBAに頼る以外に、Wordでは千単位の区切り文字、小数点文字(または通貨文字列)の現在の値を確実に検出できるものはありません。
(おそらくあなたのケースには関係ありませんが、完全性のために言及する価値はあります) SharePoint メタデータを使用してコンテンツ コントロール経由で数値を挿入する場合、小数点の "." 規則に従う必要があります。これは XML が使用する規則であり、Word ではこれを克服できないためです。
数値書式文字列では、「千単位区切り文字」は位置指定ではありません。たとえば、米国/英国の慣例で、
1000000
で書式設定する\#",0"
と となり1,000,000
、100000,0
通貨データの入力や書式設定も必要な場合は、追加の設定が適用されます。 2 つ以上の異なる通貨のデータを含むドキュメントがある場合、Word はそのうちの 1 つだけを通貨として認識することを受け入れる必要があります。
Word は、Windows コントロール パネルから、リスト区切り文字というもう 1 つの特殊文字の値を取得します。通常は、「,」または「;」のいずれかです。パラメータ付きの関数を使用する数式がある場合は、正しい区切り文字を使用する必要があります (TOC や EQ などの他のフィールド タイプでも、正しい区切り文字を使用する必要がある場合があります)。
フィールド コーディングを使用して 3 つの可変文字 (小数点、桁区切り、リスト区切り) の値を検出または評価することは、一般的には事実上不可能であると思われます。特に、通常の文書では問題にならない構文エラーが Word によってフラグ付けされる可能性がある差し込み印刷を行う場合、上で提案したアプローチでも構文エラーが発生する可能性があります。