日付形式として「,F」と入力すると、Excel はどのロケールを使用しますか?

日付形式として「,F」と入力すると、Excel はどのロケールを使用しますか?

私の会社はレポート ツールを作成しており、エクスポート形式の 1 つが Excel です。当社の顧客はさまざまな国から来ているため、Excel ファイルを生成するときに、次のフォーマッタを使用して日付を表示するロケール フォーマットを使用します。

[$-<locale here>]mmmm d, yyyy;@

したがって、セルの日付が 2020 年 3 月 31 日で、ロケールがアイルランドに設定されている場合、2020 年 3 月 10 日と表示されますが、ロケールがスペインに設定されている場合、2020 年 3 月 10 日と表示されます。

2020年3月31日の日付が2020年3月8日と表示され、機能していないというお客様からの報告を受けました。

よく調べてみると、フォーマッタが次のようにリストされていることに気付きました。

[$-,F]mmmm d, yyyy;@

Excel が実際に解析しようとしているものや、カレンダーや日付フォーマッタが役に立たない偽の日付を表示するために使用しようとしているものを見つけようとしました。明らかに、顧客のロケールをより適切に識別する必要がありますが、これは顧客のコンピューターに奇妙なロケールが設定されていることが原因か、それとも単に偽のコードが原因か、疑問に思っています。

これは Excel 2013 で発生しましたが、Excel 365 でも再現できました。また、F の 16 進値に関連付けられている国コードを検索してみましたが、何も機能しませんでした。,削除すると、フォーマッタは F をフランスのコードとして識別し、フランス語で正しい日付番号 (2020 年 3 月 30 日) を表示します。

答え1

私の知る限り、これは日付を太陰暦に変換すること[$-,F]と同等です。[$-F0000]

同じ状況で他のすべての文字が何を表しているかを見たかったので、次のように書きました。

Sub formatdates()


Dim ws As Worksheet

Set ws = Sheet1

Dim i As Integer

i = 1

Do While i < 27

    ws.Cells(i, 1) = "=TODAY"
    ws.Cells(i, 1).NumberFormat = "[$-," & Chr(64 + i) & "]dddd, mmmm dd, yyyy"
    ws.Cells(i, 2) = "[$-," & Chr(64 + i) & "]dddd, mmmm dd, yyyy"
    ws.Cells(i, 3) = ws.Cells(i, 1).NumberFormat

i = i + 1

Loop


End Sub

これは、空のワークブックであればどこでも使用できます。投稿の [$-,F] と同様に、ローマ字の各文字を書式コードとして使用して現在の日付を表示します。他にもあると思いますが、少し調べてみるには十分参考になりました。

例えば

  • [$-,F]は太陰暦を英語で表示します。5番目の月は6月と表示されます。
  • [$-,G] はインドの暦を表示します(たぶん)
  • [$-,M]はペルシャ暦を表示します(たぶん)
  • [$-,N]はヒジュラ暦を表示します

ここに画像の説明を入力してください

私も言語コードのリスト@DavidPostillがコメントに含めたリンクから(より完全なリストを持っている人もいる国コードも使用できると思います。

興味本位で、上記のコメントのリンクからコードの表を Sheet2 に配置し、これを上記の最初の関数で作成された表の下部に追加するように記述しました。

Sub formatdates2()


Dim ws As Worksheet

Set ws = Sheet1

Dim i As Integer
Dim r As Integer

r = 1

i = 28

Do While Sheet2.Cells(r, 1) <> ""

    ws.Cells(i, 1) = "=TODAY()"
    ws.Cells(i, 1).NumberFormat = "[$-" & Sheet2.Cells(r, 1) & "]dddd, mmmm dd, yyyy"
    ws.Cells(i, 2) = "[$-," & Sheet2.Cells(r, 1) & "]dddd, mmmm dd, yyyy"
    ws.Cells(i, 3) = ws.Cells(i, 1).NumberFormat
    ws.Cells(i, 4) = Sheet2.Cells(r, 2)

i = i + 1
r = r + 1

Loop


End Sub

私の知る限り、言語コード (後者のリスト/機能) とカレンダー コード (前者の機能) があります。

言語コードを探しているのだと思います。

ただし、単に を使用する方が成功する可能性もあります[$-x-sysdate]。これは、[セルの書式設定] ダイアログの [日付] の下のリストから必要な形式を選択し、[カスタム] リストで同じものを表示すると表示されるコードです。

ここに画像の説明を入力してください

関連情報