本ページには広告が含まれています。

Excel VBA Asc関数で文字コードを取得する

Excel VBA Asc関数で文字コードを取得する

Excel VBAの「Asc関数」について解説します。

スポンサーリンク

Asc関数とは

Excel VBA の Asc関数とは、指定した文字列の最初の文字に対応する文字コードを返す関数です。

Asc 関数(Visual Basic for Applications リファレンス)

構文(引数と戻り値)

Excel VBAの関数を使いこなすには、関数の構文を理解しておくことが重要です。

構文

Asc(string)

※ AscB()、AscW() も引数は同様です。

引数と戻り値

引数:string文字列 または 文字列式、文字列が格納されている変数などを指定します。

  • string に複数の文字が渡された場合、最初の1文字目の文字コードを返します。
  • string に文字が含まれていない場合、実行時エラー「エラー 5 プロシージャの呼び出し、または引数が不正です。」が発生します。

戻り値:Asc関数には、「Asc」のほか「AscB」と「AscW」関数もあります。それぞれ次のような値を返します。

関数名戻り値戻り値の型
AscShift_JIS 文字セット」の文字コードを返します。整数型(Integer)
AscB引数をバイトデータとして扱います。
文字コードではなく、最初のバイト データを返します。
整数型(Integer)
AscWUnicode (UTF-16) 文字セット」の文字コードを返します。整数型(Integer)

※ AscW関数については、Unicode がサポートされていない実行環境(Macintosh)では正しい戻り値が返らない場合があるので使用しないようにします。

解説

Asc関数は、VBA内で文字コードを取得して利用する場合や、文字コードで何かを判定したい場合などに使用します。

Asc関数

引数 string が半角英数字の場合は 0 ~ 255 の範囲の文字コードを返します。全角の場合の文字コードは -32768 ~ 32767 の範囲を返します。

引数の「文字」が Shift_JIS 文字セット内に存在しない場合、不明なので「?」の Shift_JIS 文字コード 63 を返します。

このことから、Asc関数で文字コード 63 が返る場合は Shift_JIS ではないと判定できます。言い換えると、Asc関数で、文字コード 63 が返る場合は、引数の文字は Unicode です。

AscB関数

引数 string の最初の文字の「最初のバイト データ」を整数型(10進数)で返します。

「最初のバイト データ」とは、Unicode文字セットの下位バイトのことです。下位バイト(16進数)を10進数(0ベース)に変換したデータが返ります。

2バイト文字「あ」の「最初のバイト データ」は、AscB(“あ”) の戻り値 66 です。
16進数に変換するには Hex関数を使います。Hex(66) = 42 です。Val(”&H42”) = 66 です。

AscW関数

引数 string の最初の文字の Unicode (UTF-16) 文字セットの文字コードを整数型(10進数)で返します。(Unicode文字セットを使用していないシステムでは、Shift_JIS 文字セットを返します。)

AscB関数でも使った2バイト文字「あ」の場合、AscW(“あ”)の戻り値は 12354(10進数) です。

これを16進数に変換すると、Hex(AscW(“あ”)) = 3042 (16進数)で、下位のバイトは 42 であることがわかります。

16進数を10進数に変換すると Val(”&H3042”) = 12354 です。

取得した Unicode (UTF-16) を文字に変換するには「ChrW 関数」を使用します。

使用例

Asc関数の使用例を関数別に見ていきましょう。同じ引数で関数によってどのような違いになるのかを確認してください。

Asc関数 サンプル

次の例は、Asc関数で文字列から Shift_JIS 文字コードを取得するサンプルです。

Sub Asc_Sample()
'半角文字
Debug.Print Asc("1")    '49
Debug.Print Asc("a")    '97
Debug.Print Asc("A")    '65
Debug.Print Asc("ABC")  '65
Debug.Print Asc(" ABC") '32
Debug.Print vbLf 'イミディエイトを改行
'全角文字
Debug.Print Asc("1")   '-32176
Debug.Print Asc("а")   '-31632
Debug.Print Asc("A")   '-32160
Debug.Print Asc("あ")   '-32096
Debug.Print Asc("愛")   '-30556
Debug.Print Asc("あい") '-32096
Debug.Print Asc(" あい") '-32448
Debug.Print vbLf 'イミディエイトを改行
'先頭に改行があるセルの文字列から
Debug.Print Asc(Range("F1")) '10 LF(Line Feed)
End Sub
Asc関数サンプルコード実行イミディエイト

19行目では、先頭に改行を入れて文字を入力している エクセルシートのセルから (Range(“F1”)) の文字列を引数にセットしています。戻り値は「10」です。「10」は、制御コード「LF」です。

改行文字「LF」の Shift_JIS 文字コードも取得できることが確認できました。

AscB関数 サンプル

次の例は、AscB関数で文字列から「最初のバイト データ」を取得するサンプルです。

Sub AscB_Sample()
'半角文字
Debug.Print AscB("1")    '49
Debug.Print AscB("a")    '97
Debug.Print AscB("A")    '65
Debug.Print AscB("ABC")  '65
Debug.Print AscB(" ABC") '32
Debug.Print vbLf 'イミディエイトを改行
'全角文字
Debug.Print AscB("1")   '17
Debug.Print AscB("а")   '48
Debug.Print AscB("A")   '33
Debug.Print AscB("あ")   '66
Debug.Print AscB("愛")   '27
Debug.Print AscB("あい") '66
Debug.Print AscB(" あい") '0
Debug.Print vbLf 'イミディエイトを改行
'先頭に改行があるセルの文字列から
Debug.Print Asc(Range("F1")) '10 LF(Line Feed)
End Sub
AscB関数サンプルコード実行イミディエイト

・3~7と19行目の半角文字は、1バイト文字なので Asc関数と同じ戻り値です。

・10~16行は、2バイトの全角文字なので、Unicode文字セットの下位バイト(16進数)を10進数(0ベース)に変換したデータが返っています。

AscW関数 サンプル

次の例は、AscW関数で文字列から「Unicode (UTF-16) 文字セット」の文字コードを返します。

Sub AscW_Sample()
'半角文字
Debug.Print AscW("1")    '49
Debug.Print AscW("a")    '97
Debug.Print AscW("A")    '65
Debug.Print AscW("ABC")  '65
Debug.Print AscW(" ABC") '32
Debug.Print vbLf 'イミディエイトを改行
'全角文字
Debug.Print AscW("1")   '-237
Debug.Print AscW("а")   '1072
Debug.Print AscW("A")   '-223
Debug.Print AscW("あ")   '12354
Debug.Print AscW("愛")   '24859
Debug.Print AscW("あい") '12354
Debug.Print AscW(" あい") '12288
Debug.Print vbLf 'イミディエイトを改行
'先頭に改行があるセルの文字列から
Debug.Print AscW(Range("F1")) '10 LF(Line Feed)
End Sub
AscW関数サンプルコード実行イミディエイト

・3~7と19行目の半角文字は、1バイト文字なので Asc関数、AscB関数と同じ戻り値です。

・10~16行の2バイトの全角文字の戻り値は、Unicode文字セットの整数型(10進数)データです。

おわりに

Excel VBA「Asc関数」で引数(文字列)の最初の文字の文字コードを返す方法について解説しました。

Asc関数には次の3つの関数があり、それぞれの特徴に応じて使い分けが必要です。

「Asc関数」は、引数 string の先頭の文字に対応する「Shift_JIS 文字セット」の文字コードを返します。

「AscB関数」は、引数 string の先頭の文字をバイトデータとして扱い、最初のバイト データ(Unicode文字セットの下位バイト(16進数)を10進数に変換したデータ)を返します。

「AscW関数」は、引数 string の先頭の文字に対応する「Unicode (UTF-16) 文字セット」の文字コードを返します。

Asc関数と反対に文字コードから文字列を生成できる「Chr関数」があります。

この解説が、少しでもみなさまのお役に立てたなら幸いです(^^;

スポンサーリンク
スポンサーリンク

VBAサンプルファイルはダウンロードできます

このページで使用したサンプルファイルの登録はありません(^^;

ダウンロードページへトップリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!