文字コードを調べるには、VBAのAsc
関数とAscW
関数、ワークシート関数のCode
とUnicode
があります。これらのうち、最も多くの文字種に対応できるのがワークシート関数のUnicode
です。
対象が英数字などに限定できるならばどれを使っても構いませんが、文字化けの原因や謎の記号文字の正体を調査するような場合にはUnicode
が優利です。
ワークシート関数のUnicode
WorksheetFunction.Unicode(Text)
文字列を指定した場合は、1文字目が判定されます。
Unicode
関数の戻り値は10進数です。文字コードは16進数で表すことも多いので、必要に応じてDEC2HEX
関数を併用しましょう。
サロゲートペア文字に対応します。
戻り値を16進数にしたとき、通常文字は4桁になりますが、サロゲートペア文字は5桁になります。
その他の関数で正しく判定できないケース
VBAのAsc
、AscW
、ワークシート関数のCode
では、文字コードは返すものの正しく判定できていないことがあります。判定不能としてエラーを返してくれない点が要注意です。
Asc関数やCode関数の戻り値63
戻り値の63は「?」に相当し、判定不能という結果を表します。Asc
やCode
は、ASCII(JIS)コードを返す関数なので、非アスキー文字は判定不能となります。
AscW関数の戻り値のマイナス値
AscW
関数の戻り値は0
~65535
(0x0000
~0xFFFF
)のはずですが、マイナス値が返ることがあります。このマイナス値は一種の誤判定なので、そのままChrW
関数に渡しても元の文字にはなりません。マイナス値が返るのは、対象文字がサロゲートペアの場合です。AscW
関数は、サロゲートペア1字を2字とみなしてしまい前半のコードだけを返してしまうのです。
Asc関数の戻り値のマイナス値
Asc
関数の戻り値は-32768
~32767
なのでマイナス値が返っても正常です。しかし、そのままの値をCHAR
関数に渡しても元の文字にはならず、解決には10進数・16進数のややこしさを伴います。上記例のように「æ」に97
を返す(97
は「a」)といったこともあるので、実用は避けるほうが無難かもしれません。