文字コードを調べるにはワークシート関数のUnicodeがオススメ

文字コードを調べるには、VBAのAsc関数とAscW関数、ワークシート関数のCodeUnicodeがあります。これらのうち、最も多くの文字種に対応できるのがワークシート関数のUnicodeです。

対象が英数字などに限定できるならばどれを使っても構いませんが、文字化けの原因や謎の記号文字の正体を調査するような場合にはUnicodeが優利です。

色付きセルは、CHARやUNICHAR関数で元の文字になる戻り値

ワークシート関数のUnicode

WorksheetFunction.Unicode(Text)

文字列を指定した場合は、1文字目が判定されます。

Unicode関数の戻り値は10進数です。文字コードは16進数で表すことも多いので、必要に応じてDEC2HEX関数を併用しましょう。

サロゲートペア文字に対応します。
戻り値を16進数にしたとき、通常文字は4桁になりますが、サロゲートペア文字は5桁になります。

サロゲートペアとは
扱う文字種の限界突破のために、4バイト(通常の2字分)で1字を表す漢字や絵文字の類です。かつては固有名を多く使う名簿データを扱うときに注意するくらいでしたが、最近は絵文字の普及により特別なものではなくなってきました。

その他の関数で正しく判定できないケース

VBAのAscAscW、ワークシート関数のCodeでは、文字コードは返すものの正しく判定できていないことがあります。判定不能としてエラーを返してくれない点が要注意です。

Asc関数やCode関数の戻り値63

戻り値の63は「?」に相当し、判定不能という結果を表します。AscCodeは、ASCII(JIS)コードを返す関数なので、非アスキー文字は判定不能となります。

AscW関数の戻り値のマイナス値

AscW関数の戻り値は0~65535(0x0000~0xFFFF)のはずですが、マイナス値が返ることがあります。このマイナス値は一種の誤判定なので、そのままChrW関数に渡しても元の文字にはなりません。マイナス値が返るのは、対象文字がサロゲートペアの場合です。AscW関数は、サロゲートペア1字を2字とみなしてしまい前半のコードだけを返してしまうのです。

Asc関数の戻り値のマイナス値

Asc関数の戻り値は-3276832767なのでマイナス値が返っても正常です。しかし、そのままの値をCHAR関数に渡しても元の文字にはならず、解決には10進数・16進数のややこしさを伴います。上記例のように「æ」に97を返す(97は「a」)といったこともあるので、実用は避けるほうが無難かもしれません。

 

タイトルとURLをコピーしました