5. Excelの書式のその他の情報

5.1. 標準書式について

標準書式の場合、特に数値の場合、値によってフォーマットが変わります。

100,000,000,000 以上の値、または 0.0000000001 以下の値の時、指数の書式 0.#####E-0 となります。 ただし、Excelのセルの幅が小さいと、表示される有効桁数が自動的に変わります。

さらに、それ以外の値の場合は、整数部の桁数によって、小数部の精度が変わります。 整数部の桁数が10桁以上のときは小数部はなく、整数部が10桁未満の場合は小数部が1桁づつ増えます。 例えば、 12345678.12345 の場合、書式は 0.## となります。

数値の標準書式の表示例

Excel上の表記

100000000000

1E+11

99999999999

99999999999

12345678901234

1.23457E+13

0.0000000001

1E-10

0.999999999

0.999999999

0.000000000001234567

1.23457E-12

1234567890.12345

1234567890

123456789.12345

123456789.1

12345678.12345

12345678.12

5.2. ファイル内部の日付の基準日の設定

Excelは、日付情報をファイル内部では数値型として値を保持しており、値が0の場合は基準日として、通常は 「1899年12月31日(Excel表記上は1900年1月0日)」 を表します。

この基準日は、設定によって変更することができ、ファイルごとに設定を持ちます。

5.2.1. Excelの1904年始まりの設定変更方法

Excelのバージョンによって設定方法は変わります。

  • Excel2000~2003の場合、メニュー「ツール」-「オプション」から表示されるダイアログ中のタブ「計算方法」から設定できます。

  • Excel2007の場合、Officeボタンの「オプション」から表示されるダイアログ中のペイン「詳細設定」から設定できます。

  • Excel2010の場合、メニュー「ファイル」の「オプション」から表示されるダイアログ中のペイン「詳細設定」から設定できます。

  • LibreOfficeの場合、メニュー「ツール」-「オプション」から表示されるダイアログ中のペイン「LibreOffice Calc」-「計算式」から設定できます。

_images/excel_settings_date1904_2002.png

Excel2002(XP)の場合の1904年始まりの設定

_images/excel_settings_date1904_2010.png

Excel2010の場合の1904年始まりの設定

_images/excel_settings_date1904_libre.png

LibreOfficeの場合の1904年始まりの設定

5.2.2. ライブラリによる1904年始まりの判定方法

5.2.2.1. Apache POIにおける1904年始まりの判定方法

Apache POIの場合、ファイルのフォーマットによって取得方法が変わります。

  • 公開されていないメソッドなのでリフレクションを使用して取得します。

  • 本ライブラリでは、 POICell#isDateStart1904() 中のメソッドで実装されています。

  • 1904年始まりかどうかの設定はファイル単位に持つため、Workbookを取得して判定を行います。

final Workbook workbook = cell.getSheet().getWorkbook();
if(workbook instanceof HSSFWorkbook) {
    // 拡張子がxlsの場合
    try {
        Method method = HSSFWorkbook.class.getDeclaredMethod("getWorkbook");
        method.setAccessible(true);

        InternalWorkbook iw = (InternalWorkbook) method.invoke(workbook);
        return iw.isUsing1904DateWindowing();

    } catch(NoSuchMethodException | SecurityException e) {
        logger.warn("fail access method HSSFWorkbook.getWorkbook.", e);
        return false;
    } catch(IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
        logger.warn("fail invoke method HSSFWorkbook.getWorkbook.", e);
        return false;
    }

} else if(workbook instanceof XSSFWorkbook) {
    // 拡張子がxlsxの場合
    try {
        Method method = XSSFWorkbook.class.getDeclaredMethod("isDate1904");
        method.setAccessible(true);

        boolean value = (boolean) method.invoke(workbook);
        return value;

    } catch(NoSuchMethodException | SecurityException e) {
        logger.warn("fail access method XSSFWorkbook.isDate1904.", e);
        return false;
    } catch(IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
        logger.warn("fail invoke method XSSFWorkbook.isDate1904.", e);
        return false;
    }

}

5.2.2.2. JExcelAPIにおける1904年始まりの判定方法

JExcel APIの場合も同様にWorkbookから取得しますが、セルクラスから上位のSheetクラスなどを取得できないため不便です。

  • 公開されていないメソッドなのでリフレクションを使用して取得します。

  • 本ライブラリでは、 JXLUtils#isDateStart1904(...) 中のメソッドで実装されています。

  • 1904年始まりかどうかの設定はシートにも引き継がれるため、Sheet、Wookbookのどちらからも判定できます。

// Workbookを元に判定を行う場合
public static boolean isDateStart1904(final Workbook workbook) {
    ArgUtils.notNull(workbook, "workbook");

    if(workbook instanceof WorkbookParser) {
        try {
            Field field = WorkbookParser.class.getDeclaredField("nineteenFour");
            field.setAccessible(true);

            boolean value = field.getBoolean(workbook);
            return value;

        } catch (NoSuchFieldException | SecurityException e) {
            logger.warn("fail access field WrokbookParser#nineteenFour", e);
            return false;

        } catch (IllegalArgumentException | IllegalAccessException e) {
            logger.warn("fail invoke field WrokbookParser#nineteenFour", e);
            return false;
        }

    }

    return false;
}

// Sheetを元に判定を行う場合
public static boolean isDateStart1904(final Sheet sheet) {
    ArgUtils.notNull(sheet, "sheet");

    if(sheet instanceof SheetImpl) {
        try {
            Field field = SheetImpl.class.getDeclaredField("nineteenFour");
            field.setAccessible(true);

            boolean value = field.getBoolean(sheet);
            return value;

        } catch (NoSuchFieldException | SecurityException e) {
            logger.warn("fail access field SheetImpl#nineteenFour", e);
            return false;

        } catch (IllegalArgumentException | IllegalAccessException e) {
            logger.warn("fail invoke field SheetImpl#nineteenFour", e);
            return false;
        }

    }

    return false;
}

5.2.3. 日時の内部表現

Excelの場合、日時ファイル内部では数値として値を保持し、次の仕様となっています。

  • 整数部が日付情報。

    • 1日は、値は1.0。

  • 小数部が時刻情報。

    • 1秒は、 1/(24*60*60)≒1.15741e-5

    • Excelは、秒までの精度しか持たない。

  • タイムゾーンは持たない。

    • タイムゾーンは持たないため、OSの言語環境など変わっても、表示される時間は変わりません。

  • 基準日の値は、 0.0 となる。

    • ファイルの基準日の設定により、値が 0.0 のとき、1900年1月0日始まりか1904年1月1日始まりか変わります。

  • 内部的な値が負の数とる基準日より前の日時は表現できない。

  • 1900年始まりの場合、他のオフィスアプリと互換性を持たすために、以下の不良のような仕様を引き継いでる。

    • 1900年1月0日から始まる。

    • グレゴリオ歴上は閏年でないのに、1900年2月29日が存在する。

注釈

グレゴリオ歴の閏年の定義

グレゴリオ暦 では、次の規則に従って400年間に(100回ではなく)97回の閏年を設ける。

  1. 西暦年が4で割り切れる年は閏年。

  2. ただし、西暦年が100で割り切れる年は平年(閏年でない)。

  3. ただし、西暦年が400で割り切れる年は閏年。

Excelの日付の内部表現

Excel表記上の日時

数値表現
1900年始まり
数値表現
1904年始まり

備考

1900年01月00日 00時00分00秒

0.00000000000

1900年始まりの基準日。

1900年01月01日 00時00分00秒

1.00000000000

基準日から1日進む。

1900年02月29日 00時00分00秒

60.00000000000

正しくない閏日。

1900年03月01日 00時00分00秒

61.00000000000

正しくない閏日の翌日。

1904年01月01日 00時00分00秒

1462.00000000000

0.00000000000

1904年始まりの基準日。

1970年01月01日 00時00分00秒

25569.00000000000

24107.00000000000

UTCの基準日。

YYYY年MM月DD日 00時00分01秒

0.0000115741

0.0000115741

基準日から1秒経過

YYYY年MM月DD日 00時01分00秒

0.00069444444444

0.00069444444444

基準日から1分経過

YYYY年MM月DD日 00時01分00秒

0.04166666666667

0.04166666666667

基準日から1時間経過

YYYY年MM月DD日 23時59分59秒

0.99998842592593

0.99998842592593

基準日から23時間59分59秒経過

5.2.3.1. Excel上の日時の値をUTC表記に変換する方法

Excelは日時は内部では数値で保持しており、Javaの java.util.Date に渡す形式であるUTC表現とは異なります。 また、基準日が複数あるため、UTC形式に変換するには次の計算を行う。

  1. 1904年始まりの場合。

  1. 24107の値を足す。(1970年1月1日から見て、1904年1月1日の経過日数を足す。)

  1. 1900年始まりの場合。

  1. 値が61.0以上ならば、1.0を引く。(1900年2月29日はUTC上存在しないため、1900年3月1日(=61.0)以降は、1日多くなるので調整する。)

  2. 25568.0の値を足す。(1970年1月1日から見て、1900年1月0日(=1899年12月31日)の経過日数を足す。)

  1. 値に24*60*60*1000を掛ける。(Excelは時刻が小数部なので、24*60*60で整数1桁目の精度を秒にする。UTCはミリ秒精度なので、さらに1000を掛ける。)

注釈

Excelの日時をUTCに返還する際の注意事項

  • 本ライブラリでは、 ExcelDateUtils#convertJavaDate(...) メソッドで提供されています。

  • 1900年始まりの場合、1900年1月0日は、1899年12月31日と表現します。

  • 1900年始まりの場合、1900年2月29日は、1900年3月1日と表現します。、

5.3. ビルトインフォーマット(組み込み書式)について

Excelの書式は、ファイル内部では インデックス番号 に対して、 書式のパターン が割り振られています。

その中で、インデックス番号が 0~49は予め固定のフォーマットを持ち、ビルトインフォーマット(組み込み書式)と呼ばれます。

  • Excelのバージョンによっては、インデックス番号だけ持ち、書式を持たない場合があります。

  • 50番以降は、ユーザ定義用書式として、ファイルによって異なります。

  • ただし、50~59番は、Excelの言語環境によって予約された番号で、インデックス番号だけ持ち、書式を持たない場合があります。

  • ビルインフォーマットは、JExcelAPIの場合とApaceh POIでは一部異なっています。

  • OSの言語環境によって変わるものがあります。

    • 日時、通貨記号を含む書式は、環境によって変わる可能性があります。

    • JExcelAPI/Apache POIとも英語環境の値で固定で定義されており、日本語の書式には対応していません。

注釈

ビルトインフォーマットは、各ライブラリでプログラムで固定長の文字列として記述されています。

  • Apache POIの場合、 org.apache.poi.ss.usermodel.BuiltinFormats (Javadoc ) で定義されています。

  • JExcel APIの場合、 非公開のクラス jxl.biff.BuiltInFormat で定義されています。

本ライブラリでは、OSの言語によって変わるような書式や間違っている書式は、 予め FormatterResolver#registerDefaultFormat() メソッド内で登録し、正しい書式で取得できるようにしています。

ビルドインフォーマットの一覧(0~49)
index
16進
index
10進

英語環境

日本語環境
(英語環境と同じ場合は省略)

備考

0

0

General

標準/G

標準の設定。日本語の場合、内部的には英語環境と同じ。

1

1

0

-123

小数なしの数値の書式。

2

2

0.00

-123.45

小数ありの数値の書式。

3

3

#,##0

-12,345

桁区切りの数値の書式。

4

4

#,##0.00

-12,345.67

小数あり、桁区切りの数値の書式。

5

5

$#,##0_);($#,##0)

\#,##0;\-#,##0

\-123

会計用の書式。通貨の単位や括弧が異なる。

6

6

$#,##0_);[Red]($#,##0)

\#,##0;[Red]\-#,##0

-123

会計用の書式。通貨の単位や括弧が異なる。

7

7

$#,##0.00);($#,##0.00)

\#,##0.00;\-#,##0.00

\-123.46

会計用の書式。通貨の単位や括弧が異なる。

8

8

$#,##0.00_);[Red]($#,##0.00)

\#,##0.00;[Red]\-#,##0.00

\-123.46

会計用の書式。通貨の単位や括弧が異なる。

9

9

0%

12%

100分率の書式。

a

10

0.00%

12.34%

100分率の書式。

b

11

0.00E+00

1.23E-02

指数用の書式。

c

12

# ?/?

12 1/3

分数の書式。

d

13

# ??/??

12 10/29

分数の書式。

e

14

m/d/yy

yyyy/m/d

2000/2/29

日付の書式。年の桁数、順番が異なる。

f

15

d-mmm-yy

29-Feb-00

日付の書式。

10

16

d-mmm

29-Feb

日付の書式。

11

17

mmm-yy

Feb-00

日付の書式。

12

18

h:mm AM/PM

10:19 AM

時刻の書式。

13

19

h:mm:ss AM/PM

10:19:23 AM

時刻の書式。

14

20

h:mm

10:19

時刻の書式。

15

21

h:mm:ss

10:19:23

時刻の書式。

16

22

m/d/yy h:mm

yyyy/m/d h:mm

2000/2/29 10:19

日時の書式。年の桁数、順番が異なる。

17

23

\$#,##0_);\(\$#,##0\)

$36,585

18

24

\$#,##0_);[Red]\(\$#,##0\)

$36,585

19

25

\$#,##0.00_);\(\$#,##0.00\)

$36,585.43

1a

26

\$#,##0.00_);[Red]\(\$#,##0.00\)

$36,585.43

1b

27

m/d/yy

[$-411]ge.m.d

H12.2.29

日付の書式。日本語環境の場合、和暦表示。
ファイルを際保存すると、57番に割り振られる。

1c

28

m/d/yy

[$-411]ggge"年"m"月"d"日"

平成12年2月29日

日付の書式。日本語環境の場合、和暦表示。
ファイルを際保存すると、58番に割り振られる。

1d

29

m/d/yy

[$-411]ggge"年"m"月"d"日"

平成12年2月29日

日付の書式。日本語環境の場合、和暦表示。
ファイルを際保存すると、58番に割り振られる。

1e

30

m/d/yy

2/29/00

日付の書式。

1f

31

m/d/yy

yyyy"年"m"月"d"日"

2000年2月29日

日付の書式。日本語環境の場合、和暦表示。

20

32

h:mm:ss

h"時"mm"分"

10時19分

時間の書式。日本語環境の場合、区切りが異なる。

21

33

h:mm:ss

h"時"mm"分"

10時19分

時間の書式。日本語環境の場合、区切りが異なる。

22

34

h:mm:ss

yyyy"年"m"月"

2000年2月

時刻の書式。日本語環境の場合、日付の書式。
ファイルを際保存すると、55番に割り振られる。

23

35

h:mm:ss

m"月"d"日"

2月29日

時刻の書式。日本語環境の場合、日付の書式。
ファイルを際保存すると、56番に割り振られる。

24

36

m/d/yy

[$-411]ge.m.d

H12.2.29

時刻の書式。日本語環境の場合、和暦表示。
ファイルを際保存すると、57番に割り振られる。

25

37

#,##0_);(#,##0)

#,##0;-#,##0

-123

数値の書式。日本語の場合、負の表現に括弧が付かない。

26

38

#,##0_);[Red](#,##0)

#,##0;[Red]-#,##0

-123

数値の書式。日本語の場合、負の表現に括弧が付かない。

27

39

#,##0.00_);(#,##0.00)

#,##0.00;-#,##0.00

-123.46

数値の書式。日本語の場合、負の表現に括弧が付かない。

28

40

#,##0.00_);[Red](#,##0.00)

#,##0.00;[Red]-#,##0.00

-123.46

数値の書式。日本語の場合、負の表現に括弧が付かない。

29

41

_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)

_ * #,##0_ ;_ * -#,##0_ ;_ * "-"_ ;_ @_

-123

数値の書式。日本語の場合、負の表現に括弧が付かない。

2a

42

_($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)

_ \* #,##0_ ;_ \* -#,##0_ ;_ \* "-"_ ;_ @_

\-123

会計の書式。通貨が異なる。日本語の場合、負の表現に括弧が付かない。

2b

43

_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)

_ * #,##0.00_ ;_ * -#,##0.00_ ;_ * "-"??_ ;_ @_

-123.46

数値の書式。日本語の場合、負の表現に括弧が付かない。

2c

44

_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)

_ \* #,##0.00_ ;_ \* -#,##0.00_ ;_ \* "-"??_ ;_ @_

\-123.46

会計の書式。通貨が異なる。日本語の場合、負の表現に括弧が付かない。

2d

45

mm:ss

10:19

時刻の書式。

2e

46

[h]:mm:ss

30:10:19

時間時間の書式。

2f

47

mm:ss.0

10:19.0

時間の書式。

30

48

##0.0E+0

12.3E+0

指数の書式。

41

49

@

テキスト

文字列の書式。

ビルドインフォーマットの一覧(50~)
index
16進
index
10進

英語環境

日本語環境
(英語環境と同じ場合は省略)

備考

37

55

h:mm:ss

yyyy"年"m"月"

2000年2月

時刻の書式。日本語の場合、日付の書式。

38

56

h:mm:ss

m"月"d"日"

2月29日

時刻の書式。日本語の場合、日付の書式。

39

57

m/d/yy

[$-411]ge.m.d

H12.2.29

日付の書式。日本語の場合、和暦表示。

3A

58

m/d/yy

[$-411]ggge"年"m"月"d"日"

平成12年2月29日

日付の書式。日本語の場合、和暦表示。

組み込み書式以外で、OSの言語環境によって変わる書式があります。 Excel上では、書式の前にアスタリスク(*)が付いている書式です。

言語によって書式が変わる

英語環境

日本の語環境

備考

m/d/yy

yyyy/m/d

2000/2/29

日付の書式。Excelの表記上は、「* 2001/3/14」と表示されます。
インデックス番号14の組み込み書式です。

[$-F800]dddd\,\ mmmm\ dd\,\ yyyy

yyyy"年"m"月"d"日"

2000年2月29日

日付の書式。Excelの表記上は、「* 2001年3月14日」と表示されます。

[$-F400]h:mm:ss\ AM/PM

h:mm:ss

10:19:23

日付の書式。Excelの表記上は、「* 13:30:55」と表示されます。

5.3.1. JExcelAPIによる書式のインデックスの取得

  • JExcelAPIでは、書式のインデックスの取得は DisplayFormat#getFormatIndex() から取得します。

  • ビルトインフォーマットの定義は、非公開のクラス jxl.biff.BuiltInfFomrat で定義されています。

  • 本ライブラリでは、 JXLCell#getFormatIndex() で実装されている。

final CellFormat cellStyle = cell.getCellFormat();
if(cellStyle == null) {
    // 書式を持たない場合
    return 0;
}

final Format cellFormat = cellStyle.getFormat();
if(cellFormat == null && cellStyle instanceof XFRecord) {
    final XFRecord record = (XFRecord) cellStyle;
    return (short) record.formatIndex;

} else if(cellFormat == null) {
    // 書式を持たない場合
    return 0;
}

if(cellFormat instanceof DisplayFormat) {
    final DisplayFormat displayFormat = (DisplayFormat)cellFormat;
    return (short) displayFormat.getFormatIndex();
}

// 不明な場合
return 0;

5.3.2. Apache POIによる書式のインデックスの取得

  • Apache POIの書式のインデックスは、 CellSyle#getDataFormat() から取得します。

short formatIndex = cell.getCellStyle().getDataFormat();

5.4. エラーのセルについて

Excelの計算結果などによって、エラー値が表示されます。

エラー値は数種類あり、ライブラリではコード値から判断します。

Excelのエラー値の一覧
エラーコード
(10進数)
エラーコード
(16進数)

表示

説明

0

0

#NULL!

正しくない参照演算子または正しくないセル参照を使っている場合に表示されます。
=SUM(A1:A3 C1:C3)

7

7

#DIV/0!

数式や関数が0(ゼロ)または空白のセルで割られている場合に表示されます。
=200/0

15

15

#VALUE!

関数の引数の形式が間違っている場合に表示されます。
=MAX("Dekiru")

23

17

#REF!

数式内で無効なセルが参照されている
=INT(A1) とセルA1を移動または削除してしまった場合に表示されます。

29

1d

#NAME?

Excelの関数では利用できない名前が使用されている場合に表示されます。
=HEIKIN(A1:C1)

36

24

#NUM!

数式または関数の数値が不適切な場合に表示されます。
=SMALL(A1:A3,C1) と入力して第2引数の値を数値以外のセルを指定した場合に表示されます。

42

2a

#N/A

計算や処理の対象となるデータがない、または正当な結果が得られない場合に表示されます。
=MODE(10,20,30,40)

警告

Apache POIでエラー値を取得する場合の注意事項。

POIでエラー値が正しく取得できない場合があります。

  1. ファイルの形式がxls(HSSF)の場合、全て「#VALUE!」となります。ただし、ファイルの形式がxlsx(XSSF)だと各種類が取得できます。

    • xlsx(XSSF)形式の場合でも場合によっては異なるコード値となります。

  2. 関数「=DATE(50000,1,1)」はExcelでは「#NUM!」と表示され計算できないが、POIの場合は正常に計算ができます。

    • これは、Javaの日付の表示範囲がExcelよりも広いため。

5.5. ロケールID(LCID)の一覧

Excelで指定可能なロケールの一覧は、外部サイトの ロケール ID (LCID) の一覧 で確認できます。

Excelの書式で指定する際には、16進数表記の値で指定します。

日本語の場合、LCIDは0x0411であるため、書式上では [$-411] と指定します。

LCIDの一覧

ロケール名

言語コード

16進値

10進数

ロケール名

言語コード

16進値

10進数

アフリカーンス語

af

0x0436

1078

ヒンズー語

hi

0x0439

1081

アルバニア語

sq

0x041C

1052

ハンガリー語

hu

0x040E

1038

アラビア語 (U.A.E.)

ar-ae

0x3801

14337

アイスランド語

is

0x040F

1039

アラビア語 (バーレーン)

ar-bh

0x3C01

15361

インドネシア語

in

0x0421

1057

アラビア語 (アルジェリア)

ar-dz

0x1401

5121

イタリア語 (イタリア)

it

0x0410

1040

アラビア語 (エジプト)

ar-eg

0x0C01

3073

イタリア語 (スイス)

it-ch

0x0810

2064

アラビア語 (イラク)

ar-iq

0x0801

2049

日本語

ja

0x0411

1041

アラビア語 (ヨルダン)

ar-jo

0x2C01

11265

韓国語

ko

0x0412

1042

アラビア語 (クウェート)

ar-kw

0x3401

13313

ラトビア語

lv

0x0426

1062

アラビア語 (レバノン)

ar-lb

0x3001

12289

リトアニア語

lt

0x0427

1063

アラビア語 (リビア)

ar-ly

0x1001

4097

マケドニア語 (FYROM)

mk

0x042F

1071

アラビア語 (モロッコ)

ar-ma

0x1801

6145

マレー語 (マレーシア)

ms

0x043E

1086

アラビア語 (オマーン)

ar-om

0x2001

8193

マルタ語

mt

0x043A

1082

アラビア語 (カタール)

ar-qa

0x4001

16385

ノルウェー語 (ブークモール)

no

0x0414

1044

アラビア語 (サウジアラビア)

ar-sa

0x0401

1025

ポーランド語

pl

0x0415

1045

アラビア語 (シリア)

ar-sy

0x2801

10241

ポルトガル語 (ポルトガル)

pt

0x0816

2070

アラビア語 (チュニジア)

ar-tn

0x1C01

7169

ポルトガル語 (ブラジル)

pt-br

0x0416

1046

アラビア語 (イエメン)

ar-ye

0x2401

9217

レトロマン語

rm

0x0417

1047

バスク語

eu

0x042D

1069

ルーマニア語

ro

0x0418

1048

ベラルーシ語

be

0x0423

1059

ルーマニア語 (モルドバ)

ro-mo

0x0818

2072

ブルガリア語

bg

0x0402

1026

ロシア語

ru

0x0419

1049

カタロニア語

ca

0x0403

1027

ロシア語 (モルドバ)

ru-mo

0x0819

2073

中国語 (中華人民共和国)

zh-cn

0x0804

2052

セルビア語 (キリル文字)

sr

0x0C1A

3098

中国語 (香港)

zh-hk

0x0C04

3076

ツワナ語

tn

0x0432

1074

中国語 (シンガポール)

zh-sg

0x1004

4100

スロベニア語

sl

0x0424

1060

中国語 (台湾)

zh-tw

0x0404

1028

スロバキア語

sk

0x041B

1051

クロアチア語

hr

0x041A

1050

ソルビア語

sb

0x042E

1070

チェコ語

cs

0x0405

1029

スペイン語 (スペイン)

es

0x040A

1034

デンマーク語

da

0x0406

1030

スペイン語 (アルゼンチン)

es-ar

0x2C0A

11274

オランダ語

nl

0x0413

1043

スペイン語 (ボリビア)

es-bo

0x400A

16394

オランダ語 (ベルギー)

nl-be

0x0813

2067

スペイン語 (チリ)

es-cl

0x340A

13322

英語 (オーストラリア)

en-au

0x0C09

3081

スペイン語 (コロンビア)

es-co

0x240A

9226

英語 (ベリーズ)

en-bz

0x2809

10249

スペイン語 (コスタリカ)

es-cr

0x140A

5130

英語 (カナダ)

en-ca

0x1009

4105

スペイン語 (ドミニカ共和国)

es-do

0x1C0A

7178

英語 (アイルランド)

en-ie

0x1809

6153

スペイン語 (エクアドル)

es-ec

0x300A

12298

英語 (ジャマイカ)

en-jm

0x2009

8201

スペイン語 (グアテマラ)

es-gt

0x100A

4106

英語 (ニュージーランド)

en-nz

0x1409

5129

スペイン語 (ホンジュラス)

es-hn

0x480A

18442

英語 (南アフリカ)

en-za

0x1C09

7177

スペイン語 (メキシコ)

es-mx

0x080A

2058

英語 (トリニダード)

en-tt

0x2C09

11273

スペイン語 (ニカラグア)

es-ni

0x4C0A

19466

英語 (U.K.)

en-gb

0x0809

2057

スペイン語 (パナマ)

es-pa

0x180A

6154

英語 (U.S.)

en-us

0x0409

1033

スペイン語 (ペルー)

es-pe

0x280A

10250

エストニア語

et

0x0425

1061

スペイン語 (プエルトリコ)

es-pr

0x500A

20490

ペルシャ語

fa

0x0429

1065

スペイン語 (パラグアイ)

es-py

0x3C0A

15370

フィンランド語

fi

0x040B

1035

スペイン語 (エルサルバドル)

es-sv

0x440A

17418

フェロー語

fo

0x0438

1080

スペイン語 (ウルグアイ)

es-uy

0x380A

14346

フランス語 (フランス)

fr

0x040C

1036

スペイン語 (ベネズエラ)

es-ve

0x200A

8202

フランス語 (ベルギー)

fr-be

0x080C

2060

ソト語

sx

0x0430

1072

フランス語 (カナダ)

fr-ca

0x0C0C

3084

スウェーデン語

sv

0x041D

1053

フランス語 (ルクセンブルグ)

fr-lu

0x140C

5132

スウェーデン語 (フィンランド)

sv-fi

0x081D

2077

フランス語 (スイス)

fr-ch

0x100C

4108

タイ語

th

0x041E

1054

ゲール語 (スコットランド)

gd

0x043C

1084

トルコ語

tr

0x041F

1055

ドイツ語 (ドイツ)

de

0x0407

1031

ツォンガ語

ts

0x0431

1073

ドイツ語 (オーストリア)

de-at

0x0C07

3079

ウクライナ語

uk

0x0422

1058

ドイツ語 (リヒテンシュタイン)

de-li

0x1407

5127

ウルドゥー語 (パキスタン)

ur

0x0420

1056

ドイツ語 (ルクセンブルグ)

de-lu

0x1007

4103

ベトナム語

vi

0x042A

1066

ドイツ語 (スイス)

de-ch

0x0807

2055

コーサ語

xh

0x0434

1076

ギリシャ語

el

0x0408

1032

イディッシュ語

ji

0x043D

1085

ヘブライ語

he

0x040D

1037

ズールー語

zu

0x0435

1077

5.6. 漢数字/大字変換のアルゴリズム

漢数字や大字への変換は、下記のように行います。

  1. 値が0の時は、値を〇(ゼロ)として処理を終了。

  2. 下の桁から4桁ごとに分割する。

  1. 実装方式としては、数値形式の場合は、10,000で割っていった余りに対して処理する。

  1. 分割した内容を漢数字に変換する。

  1. 0の場合は省略する。

  2. 1の場合は、桁数におおじて数値を省略し、単位のみを付与する。
    例えば、1の位の場合は数値を省略しない。
    十の位は、「十」と数値を省略して単位を付与する。
  1. 分割した変換結果に、4桁区切りの単位を付けて、結合する。

_images/convert_kansuji.png

漢数字の変換の概要