更新日:、 作成日:
VBA Asc 関数:文字コードを取得する
はじめに
Excel VBA マクロの Asc 関数と AscW 関数から文字コードを取得する方法を紹介します。
Asc 関数は、指定した文字の文字コード (Shift_JIS) を返します。
AscW 関数は、指定した文字の Unicode (UTF-16) を返します。
半角文字なら 0 ~ 255 の範囲を返します。A なら 65 を返します。ASCII コードと同じ値です。
Unicode のサロゲートペア文字 𩸽 の文字コードは上位 -10137 と下位 -8643 です。
文字コードを取得や判定したいときに使用します。
Asc 関数、AscW 関数の引数と戻り値
Asc(文字列)
文字列の先頭の文字の文字コード (Shift_JIS) を取得します。
引数「文字列」 | 文字列を指定します。 |
戻り値の型 | 数値型 (Integer) |
AscW(文字列)
文字列の先頭の文字の Unicode (UTF-16) を取得します。
引数「文字列」 | 文字列を指定します。 |
戻り値の型 | 数値型 (Integer) |
解説
Asc 関数
戻り値は Shift_JIS の文字コードです。
引数「文字列」の 1 文字目の文字コードを返します。
引数「文字列」が半角のときは 0 ~ 255 の範囲を返します。ASCII コードと同じ値です。全角のときは -32768 ~ 32767 の範囲を返します。
Shift_JIS に存在しない文字の文字コードは ? の 63 を返します。これを利用して、その文字が Shift_JIS の文字か Unicode 文字かを判定できます。
引数「文字列」が空文字の時は「エラー 5 プロシージャの呼び出し、または引数が不正です。」が発生します。
取得した文字コードを文字に変換するには「Chr 関数」を使用します。
AscW 関数
戻り値は Unicode (UTF-16) の文字コードです。Long 型で取得するには CUInt 関数を作成します。
引数「文字列」の 1 文字目の文字コードを返します。
引数「文字列」が半角英数字のときは 0 ~ 127 の範囲を返します。ASCII コードと同じ値です。
引数「文字列」が空文字の時は「エラー 5 プロシージャの呼び出し、または引数が不正です。」が発生します。
Unicode のサロゲートペア文字は 2 文字として扱います。𩸽 の文字コードは上位 -10137 と下位 -8643 です。負の値になっているのは、戻り値の型が Integer のためです。
上位と下位を結合した 171581 (&H29E3D) は取得できません。Excel の「エクセル UNICODE 関数:文字の Unicode を取得する」を使用して取得できます。詳しくは「文字コードを変換や判定する」をご覧ください。
取得した Unicode (UTF-16) を文字に変換するには「ChrW 関数」を使用します。
数値を 16 進数に変換するには「Hex 関数」を使用します。
スポンサーリンク
使用例、Asc 関数
Asc 関数の使用例を紹介します。
文字コードを取得する
文字コード (Shift_JIS) を取得します。
Dim i As Integer
i = Asc("0")
Debug.Print(i) ' 48
i = Asc("9")
Debug.Print(i) ' 57
i = Asc("A")
Debug.Print(i) ' 65
i = Asc("Z")
Debug.Print(i) ' 90
i = Asc("a")
Debug.Print(i) ' 97
i = Asc("z")
Debug.Print(i) ' 122
i = Asc("あ")
Debug.Print(i) ' -32096
i = Asc("あいう") ' 1 文字目の「あ」のコードを取得する
Debug.Print(i) ' -32096
i = Asc("") ' エラー
文字列の全ての文字コードを取得する
文字列の全ての文字コードを取得します。
Dim s As String ' 文字列
s = "ABC"
Dim i As Integer
Dim char As String
Dim code As Integer
' 1 文字ずつ取得する
For i = 1 To Len(s)
char = Mid(s, i, 1)
code = Asc(char)
Debug.Print(code) ' 65 66 67
Next
文字コードを文字に変換する
文字コード (Shift_JIS) を文字に変換します。
Dim s As String
s = Chr(48)
Debug.Print(s) ' 0
s = Chr(65)
Debug.Print(s) ' A
s = Chr(-32096)
Debug.Print(s) ' あ
使用例、AscW 関数
AscW 関数の使用例を紹介します。
Unicode を取得する
Unicode (UTF-16) を取得します。
Dim i As Integer
i = AscW("0")
Debug.Print(i) ' 48
i = AscW("9")
Debug.Print(i) ' 57
i = AscW("A")
Debug.Print(i) ' 65
i = AscW("Z")
Debug.Print(i) ' 90
i = AscW("a")
Debug.Print(i) ' 97
i = AscW("z")
Debug.Print(i) ' 122
i = AscW("あ")
Debug.Print(i) ' 12354
i = AscW(ChrW(38960)) ' 頰、Unicode 文字
Debug.Print(i) ' -26576、Integer なので負の値になる
サロゲートペア文字の Unicode を取得する
サロゲートペア文字の上位と下位を Unicode (UTF-16) で取得します。
Dim s As String
s = WorksheetFunction.Unichar(171581) ' 𩸽、サロゲートペア文字
Dim high As Integer ' 上位コード
Dim low As Integer ' 下位コード
high = AscW(Mid(s, 1, 1))
low = AscW(Mid(s, 2, 1))
Debug.Print(high) ' -10137、上位コード
Debug.Print(low) ' -8643、下位コード
Range("A1").Value = ChrW(high) & ChrW(low) ' 𩸽
サロゲートペア文字の結合された Unicode (UTF-16) を取得します。
Dim s As String
Dim d As Double
s = WorksheetFunction.Unichar(171581) ' 𩸽
d = WorksheetFunction.Unicode(s)
Debug.Print(d) ' 171581
s = WorksheetFunction.Unichar(128515) ' 😃
d = WorksheetFunction.Unicode(s)
Debug.Print(d) ' 128515
戻り値が Integer なので負の値になるときがあります。これを Long として正の値にするには CUInt 関数を作成して変換できます。
Sub 実行()
Dim s As String
s = WorksheetFunction.Unichar(171581) ' 𩸽
Dim high As Long ' 上位コード
Dim low As Long ' 下位コード
high = CUInt(AscW(Mid(s, 1, 1)))
low = CUInt(AscW(Mid(s, 2, 1)))
Debug.Print(high) ' 55399、上位コード
Debug.Print(low) ' 56893、下位コード
Range("A1").value = ChrW(high) & ChrW(low) ' 𩸽
End Sub
' 符号あり Integer を 符号なし UInteger に変換します。
Function CUInt(ByVal value As Integer) As Long
' value が正の値のときはそのまま
If value >= 0 Then
CUInt = value
Exit Function
End If
' 負の値のときは UInteger の最大値 + 1 の値を加える
CUInt = value + 65536
End Function
スポンサーリンク