窓辺の小石 第213回 Number, Number, Number !
2025年4月25日(金)14時20分 マイナビニュース
日本に住んでいると避けられないものに年号と漢数字がある。年号に関しては以前解説した。今回は漢数字である。Windowsや.NETなど海外で作られたソフトウェアの大半は最低限のローカライゼイションには対応してくれるものの漢数字のような「些細な問題」には対応してくれない。
英語の命数法(Numeral system)は、10の3乗を基本(これを俗にショートスケールという)とするが、1970年代には英国では10の6乗だった(これをロングスケールという)。筆者などは、アメリカとイギリスでは、数字の表現が違うと習った。現在では、イギリスも10の3乗ベースである。
数字には、アラビア数字(算用数字)を使うが、数字を読みやすいように3桁単位で区切るソフトウェアも少なくない。横書きならアラビア数字でいいのだが、縦書きとなるとアラビア数字は全角でも半角でもしっくりこない。どうしても漢数字となるわけだが、かといってアラビア数字を漢数字に変換するスクリプトは、その場で作るほど簡単でもないし、そのためのツールやライブラリをインターネット検索してダウンロード、インストールするぐらいなら、手作業でもいいか、と思ってしまう。
面倒なのは、漢数字による数字の表記は、「小字(ショウジ)」と「大字(ダイジ)」の大きく2種類あり、さらに単純に数字を置き換えるだけのものと、「千」、「万」といった命数法を使うものがあり、4通りのパターンに対応する必要がある。ただし、数字を置き換えるだけのパターンは、配列やハッシュテーブルを使えば簡単にできるので騒ぐほどのことでもない。
小字は、いわゆる漢数字である。大抵は、命数法を使うが、単純な数値の場合、千、万などの数詞を使わない。
大字は、手書きの書類で金額など、書き換えられては困るものを表現するときに使う。大字による表現は8世紀の大宝律令で定められ長い歴史があり、さすがに無碍にはできない。
大字にも命数法を使うものとアラビア数字を単純に置き換えるものがあるのだが、現状では、大字の使い道は、金額表現に限られ、命数法による表現が普通。世の中には、ID番号のように命数法を使わないものもあるが、縦書きされることがほとんどない。
大字、小字を含めて漢数字を扱うには、ExcelのTextワークシート関数を使うのが便利だ。Excelのワークシート関数は、コマンドラインから簡単に呼び出せる。これについては過去記事「窓辺の小石(208) Excelの魂」で解説した。
Text関数は、Excelのすべての書式を扱える。その中に、数字を小字、大字、全角アラビア数字、半角アラビア数字で表現するオプションがある(表01)。これはあくまでも数字に関するオプションで、これに書式指定を別につける。PowerShellから使う場合、Text関数の最初の引数は文字列表現された数値でも構わない。同じワークシート関数であるNumberString関数を使う方法もあるが、Text関数のほうが対応できるパターンが多い。例えば、NumberString関数では、日付を扱うことができない。
代表的な書式としては、命数法を使う一般的な数値表現(“G/標準”)、単に数字を置き換えるだけのもの(“0”)、日付の書式(“ggge年m月d日”など)がある(写真01)。なお途中にある“[$-ja-JP]”は、ロケールを示す。というのは、小字、大字ともに台湾、中国でも使われているからだ。ちなみにExcelの書式指定文字ては、常にロケール指定が可能で、Excelの対応言語版にかかわらず日付などで明示的に英語表記や日本語表記を指定できる。
今回のタイトルネタは、SFではないが前回の大阪万博が開催された1970年公開の「トラ、トラ、トラ!」である。真珠湾攻撃を描くこの映画で、作戦決行を意味する「ニイタカヤマノボレ 一二〇八(ヒトフタマルハチ)」が艦隊司令官(たしか水戸黄門の東野英治郎)に届く。「一二〇八」は、作戦決行の日付12月8日(日本時間)である。電文の画像は出ないが、「一二〇八」は、漢数字だったんじゃないかと想像。日米合作のためか、双方に配慮したシナリオだった。