和風スパゲティのレシピ

日本語でコーディングするExcelVBA

文字コードを取得する - Asc/AscW/AscB関数

対象文字の文字コードを取得する、Asc関数シリーズを解説します。

Asc関数シリーズには、

  • Shift-JISでの文字コードを調べるAsc関数
  • Unicodeでの文字コードを調べるAscW関数
  • 第1文字ではなく第1バイトの文字コードを調べるAscB関数

の3つがあります。

基本形

Asc(対象文字列)

実行例

Dim ShiftJIS非対応文字 As String
ShiftJIS非対応文字 = ChrW(12991)

Debug.Print Asc("あ") '= -32096
Debug.Print Asc("あいう") '= -32096 ' ※ 最初の1文字が対象
Debug.Print Asc("1") '= 49
Debug.Print Asc(1) '= 49 ' 数値も文字として処理

Debug.Print Asc("?") ' = 63
Debug.Print Asc(ShiftJIS非対応文字) '= 63 ※ 対応文字がなければ?になる
Debug.Print AscW(ShiftJIS非対応文字) '= 12991

Debug.Print Asc("あ") '= -32096
Debug.Print AscW("あ") '= 12354 ※ AscとAscWは同じ文字でも違う結果になる
Debug.Print Asc("1") '= 49
Debug.Print AscW(1) '= 49 ※ 数字やアルファベットは同じ結果になる

Debug.Print AscB("あ") '= 66 ※ 2バイトのうち最初の1バイトの文字コード

解説

Asc関数シリーズは対象文字の文字コードを調べる関数です。

文字列を渡した場合は「最初の1文字目」を対象とし、
AscB関数の場合は「最初の1バイト目」を対象とします。


Asc関数はShift-JISでの文字コードを、
AscW関数はUnicodeでの文字コードを返します。


実行例を見てわかる通り、

  • Asc関数は対応文字列がない場合は「?」の63を返す
  • Asc関数とAscW関数は同じ文字でも違う値を返す場合がある

このような仕様になっているので注意してください。


ちなみにAsc関数とAscW関数が同じ値を返すのは、
アルファベットや数字などのいわゆる「1バイト文字」の場合です。

この時返されるコードは「Ascii(アスキー)コード」と呼ばれており、
1バイト文字しか入力できなかったときはこの文字コードが使われていました。


このことから、この関数を「アスキー関数」と呼ぶ人が多いです。
そう呼ばれたらこの関数のことと認識してください。


この関数の使い道として一番多いのが、
VBEで表示できない文字をセルに出力する場合です。


例えば㊿などをセルに出力する際、
VBEに直に入力しようとすると「?」になってしまいます。

この対策として、今回の実行例で使ったように、

Range("A1") = ChrW(12991)

Unicode文字を文字コードから取得するChrW関数を使用します。


このとき、㊿の文字コード「12991」を調べる必要があるのですが、
これを調べる最も簡単な方法として、セルに㊿を入力したうえで、

?AscW(Selection)

とイミディエイトウィンドウに入力することで調べることができます。


ChrW関数に使用する値はAscW関数で調べることができますので、
VBEに入力できない文字を扱う場合はこの関数コンビを使用して下さい。