サイトについて      連絡先   検索

VBA Asc 関数

はじめに

Excel VBA マクロの Asc と AscW 関数を紹介します。

Asc 関数は、指定した文字の文字コード (Shift_JIS) を返します。

AscW 関数は、指定した文字の Unicode (UTF-16) を返します。

文字コードを扱う処理をするときに使用します。

  • 目次
    • 構文
    • 解説
    • 使用例

構文

Asc(文字列)
文字列の先頭の文字の文字コード (Shift_JIS) を取得します。

引数「文字列」文字列を指定します。
戻り値の型数値型 (Integer)

AscW(文字列)
文字列の先頭の文字の Unicode (UTF-16) を取得します。

引数「文字列」文字列を指定します。
戻り値の型数値型 (Integer)

解説

Asc 関数

戻り値は Shift_JIS の文字コードです。

引数「文字列」の 1 文字目の文字コードを返します。

引数「文字列」が半角のときは0 ~ 255の範囲を、全角のときは-32768 ~ 32767の範囲で返します。

引数「文字列」が空文字の時はエラーになります。

文字コードを文字に変換するには「Chr 関数」を使用します。

インターネット上にある文字コード表は 16 進数になっています。16 進数を数値にするには&H82A0のように&Hを頭に付けます。ちなみに&H82A0の文字コードで数値では-32096です。

AscW 関数

戻り値は Unicode (UTF-16) の文字コードです。Long 型で取得するには CUInt 関数を作成します。

引数「文字列」の 1 文字目の文字コードを返します。

引数「文字列」が空文字の時はエラーになります。

サロゲートペア文字は 2 文字として扱います。𩸽の文字コードは上位-10137と下位-8643です。負の値になっているのは、戻り値の型が Integer のためです。

上位と下位を結合した171581 (&H29E3D)は取得できません。「エクセル UNICODE 関数:文字の Unicode を取得する」を使用して取得できます。詳しくは「Unicode 文字の入力や読み込み」をご覧ください。

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

使用例

Asc 関数


Dim i As Integer
  
i = Asc("a")
Debug.Print(i) ' 97

i = Asc("z")
Debug.Print(i) ' 122

i = Asc("A")
Debug.Print(i) ' 65

i = Asc("Z")
Debug.Print(i) ' 90

i = Asc("あ")
Debug.Print(i) ' -32096

i = Asc("あいう") ' 1 文字目の「あ」のコードを取得する
Debug.Print(i) ' -32096

文字コードを文字に変換する。


Dim s As String

s = Chr(97)
Debug.Print(s) ' a
  
s = Chr(-32096)
Debug.Print(s) ' あ

文字列の全ての文字コードを取得する。


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

AscW 関数

Unicode (UTF-16) で取得する。


Dim i As Integer

i = AscW("A")
Debug.Print (i) ' 65

i = AscW("Z")
Debug.Print (i) ' 90

i = AscW("あ")
Debug.Print (i) ' 12354
  
i = AscW(ChrW(38960)) ' 頰、Unicode 文字
Debug.Print (i) ' -26576、Integer なので負の値になる

サロゲートペア文字の上位と下位を 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
  • 目次
    • 構文
    • 解説
    • 使用例