Unicodeでは、収録した「文字」に名前と符号位置(文字コードの元になるもの)をつけて区別している。似たような字は複数あるが、それぞれに異なる符号位置と名前がある。ただし、残念なことに漢字に関しては、名前は付けられていない。Unicode制定初期の頃、全ての文字を16 bit空間に入れようとして、中国、日本、韓国の漢字で同じ形のものを1つの符号位置に統合してしまった過去があるからだ。統合したものは、それぞれの国で発音や表記がちがう別の文字であるため名前のつけようがないのである。もっとも、アルファベットに比べれば大量にあるので1つ1つ名前を付けるのは困難だっただろう。
Unicodeに収録されている文字は「Unicode Character Databse」(UCD)と「Unicode Han Database」(Unihan。漢字のみ)で検索できる。ちなみに“Han”は、中国語での「漢」の発音である。
Unicodeに収録されている文字は、Unicode.orgのサイトで調べることができる。たとえば、文字の名前からなら、以下のURLで調べることができる。
・Character Name Index
https://www.unicode.org/charts/charindex.html
Unicodeの符号位置からなら以下のページで閲覧ができる。
・Unihan Database
https://www.unicode.org/charts/unihangridindex.html
UCDもUnihanもDatabaseというが、実際に成果物として公開されているのはテキストファイルだ。だから、文字を表示するのは、これを読み込んで動作するプログラムにまかされている。とはいえ、プログラムを書くのはちと荷が重い。なのでExcelを使うことにする。
さて、UCDで公開されているテキストファイルのうち、もっとも重要なのは、UnicodeData.txtというファイルで、以下のURLでアクセスが可能だ。
https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt
このファイルは、Unicodeの符号位置を先頭に持ち、セミコロンで区切られた行形式のデータになっている。これをExcelで読み込めば、Unicode文字のデータベースになる。フィールドは(表01)のような構造になっている。定義は以下にある。
・UAX #44: Unicode Character Database
https://www.unicode.org/reports/tr44/tr44-26.html#UnicodeData.txt
■表01 | ||
---|---|---|
位置 | フィールド名 | 意味(簡易) |
0 | Code point | 符号位置または範囲 |
1 | Name | 文字の名前 |
2 | General_Category | 分類 |
3 | Canonical_Combining_Class | 正準結合文字のクラス |
4 | Bidi_Class | 双方向文字クラス |
5 | Decomposition_Type | 分解のタイプ |
6 | Numeric_Type-Numeric_Value | 10進数(Numeric_Type=Decimal)の値 |
7 | Numeric_Type-Numeric_Value | 数字(Numeric_Type=Digit)の値 |
8 | Numeric_Type-Numeric_Value | 数値(Numeric_Type=Numeric)の値 |
9 | Bidi_Mirrored | 双方向のとき鏡面対称になるか |
10 | Unicode_1_Name | 旧Unicode 1.x時の名称 |
11 | ISO_Comment | ISO 10646のコメントフィールド |
12 | Simple_Uppercase_Mapping | Upper Caseの場合の符号位置 |
13 | Simple_Lowercase_Mapping | Lower Caseの場合の符号位置 |
14 | Simple_Titlecase_Mapping | Title Caseの場合の符号位置 |
まずは、UnicodeData.txtを読み込もう。これには、ExcelのPowerQueryという機能を使う(図01)。ちなみにExcelは、Microsoft 365版を想定しているが、Excel 2016でも同じ事ができる(ただしメニューやダイアログ名称、手順には違いがある)。
UnicodeData.txtから作られたテーブルの各列に名前を付けるのは、他のシートから参照するためだ。なお、標準状態では、自動更新されることがあるので、手動でのみ更新するようにしておく(クエリのプロパティダイアログの使用タブにあるコントロールの更新の項目を全てオフ)。UnicodeData.txtは、Unicodeバージョンに連動しているため、更新は最短でも年一回程度である。
Excelでは、Unicode文字はUNICHAR関数で表示でき、UNICODE関数で文字から符号位置を取得することもできる。読み込んだUnicodeData.txtは、VLOOKUP関数を使えば、先頭のコードをキーに各フィールドを取り出すことができる。まずは、新規のシートに表を作る。検索キーになるのは、Unicodeの符号位置だ。ここでは、Unicodeでハイフンやダッシュなど、横棒の文字のキーを集めてみた。
Unicodeの符号位置は、通常「U+2010」など「U+」を先頭につけた16進数で表現されるが、ここでは、「U+」なしの16進数を左端(仮にA列とする)に置いた。隣にUNICHAR関数「=UNICHAR(Hex2Dec(A1))」、そしてVLOOKUPを並べる(図02)。とりあえずNameフィールドを取り出す場合、見出し行に、Nameフィールド列につけたExcelの「名前」(Name)を置き、以下のようにVLOOKUP関数を使う。
=VLOOKUP($A2,UnicodeData,COLUMN(INDIRECT(C$1)),FALSE)
数式は同一のままで、見出し行に必要なフィールド名を並べれば、データを取り出してくれる。だから、数式はオートフィルでコピーするだけでよい。ざっと探しただけでUnicodeには、横棒となる記号文字(Dash_Punctuation)が30個近くあった。その他にも、漢数字や音引き、罫線文字などもある。さすがに形から検索することはできないが、General_CategoryがPd(Dash_Punctuation)になるものを探すことは可能だ。
UnicodeData.txtには、文字の組み合わせで作られる合字(正式には分解可能文字。Composite Characterという)などに関する情報もある。たとえば日本語のカタカナ、ひらがなの濁音文字は、清音文字と濁点の組み合わせで表現することも可能だ。これを示すのが「Decomposition_Type」だ。たとえば「が」(U+304C。HIRAGANA LETTER GA)では「304B 3099」になっていて、304Bは「か」(HIRAGANA LETTER KA)、3099は濁点(COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK)を表す(写真01)。
Excelが便利なのは、テキストを読み込んで、データベースのようなものを簡単に作ることができる点だ。しかも、ほとんどの場合プログラム(VBA)さえ書く必要がない。筆者は毎日のように仕事でExcelを使っているが、プログラムを書くのは年に数回程度だ。もし、プログラムを書かねばならないとしたら、そもそもExcelでやるべきことなのかを考えた方がよい。