当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

【VBA】Asc・Chr (ASCIIコードと文字列の変換)

【VBA】Asc関数

VBA の Asc は指定した文字を ASCII コード に対応する数値に変換する関数です。たとえば小文字のアルファベットの a と z を表す文字コードを知りたいときは次のように記述します。

'[VBA] Ascで小文字アルファベットのASCIIコードを調べる
Sub Asc_Lowercase()
  Debug.Print Asc("a"); Asc("z")
End Sub

'Asc_Lowercaseの実行結果:
'97 122

Asc_Lowercase() を実行すると「97 122」という数値が返ってくるので、小文字のアルファベットには 97 ~ 122 という数値が対応していると推測できるのです。ついでに大文字のアルファベットの文字コードも調べておきましょう。

'[VBA] Ascで大文字アルファベットのASCIIコードを調べる
Sub Asc_Uppercase()
  Debug.Print Asc("A"); Asc("Z")
End Sub

'Asc_Uppercaseの実行結果:
'65 90

Asc_Uppercase() を実行すると「65 90」という数値が返ってくるので、大文字アルファベットには 65 ~ 90 の数値が割り当てられていることがわかります。次はひらがなの「あ」と「ん」を調べてみます。

'[VBA] Ascでひらがなの「あ」と「ん」のASCIIコードを調べる
Sub Asc_Hiragana()
  Debug.Print Asc("あ"); Asc("ん")
End Sub

'Asc_Hiraganaの実行結果:
'-32096 -32015

Asc_Hiragana() を実行すると「-32096 -32015」という数値が返ってきます。

【VBA】Chr関数

VBA の Chr は Asc関数とは逆に、指定した ASCII コードを対応する文字列に変換する関数です。

'[VBA] ChrでASCIIコード97に対応する文字を取得
Sub Chr_Test_1()
  Debug.Print Chr(97)
End Sub

'Chr_Test_1の実行結果:
'a

 Chr_Test_1() を実行すると小文字アルファベット「a」が返ってきます。さきほど Asc関数でひらがなには -32096 ~ -32015 という数値が対応していることを調べましたが、具体的にどんなふうに割り当てられているか知りたいときは、ヘルプの ASCII コードを眺めるか(目がちかちかするけどね)、次のようなマクロを書いて調べます。

'[VBA] ChrでASCIIコードに対応する文字を調べる
Sub Chr_Test_2()
  For i = -32096 To -32015
    Debug.Print i; Chr(i)
  Next i
End Sub

'Chr_Test_2の実行結果:
'-32096 あ
'-32095 ぃ
'-32094 い
'-32093 ぅ
'-32092 う
'-32091 ぇ
'-32090 え

Chr_Test_2 を実行すると各コードに対応するひらがながずらずら並びます(やっぱり目がちかちかするけどね)。
 
≫【VBA】Lenで文字数をカウント

ALPHABET関数

Chr 関数を使って、26文字のアルファベットをランダムに選ぶ関数を作ってみました。他の関数と組合わせると色々なことに応用がきくので重宝しています。

'[VBA] アルファベットをランダムに選ぶ関数

Function ALPHABET(Optional n As Long = 26) As String

  Dim rd As Long

  '0~nの整数乱数
  rd = Int(Rnd * n)

  'ASCIIコードrd+97に対応する文字列を取得
  ALPHABET = Chr(rd + 97)

End Function

ALPHABET 関数の引数 n はオプションで、デフォルトでは 26 に設定してあります。26 はアルファベットの文字数です。適当なセルに

=ALPHABET()

と入力すると、a から z の 26 文字の中から無作為に 1 文字が選ばれます。ユーザーが n を指定することで、アルファベットの範囲を設定できます。たとえば、

=ALPHABET(3)

と入力すると、a, b, c の中から 1 文字がそれぞれ約 33 % の確率で選び出されます。以下のコードを実行すると、ALPHABET(3) を 10000 回呼び出して、a, b, c がそれぞれ何回出力されたかを確認できます。

'[VBA] a,b,cの出力回数の頻度を調査

Sub ALPHABET_FREQUENCY()

  Dim i As Long
  Dim abc As String
  Dim cta As Long, ctb As Long, ctc As Long

  For i = 1 To 10000

    abc = ALPHABET(3)

    If abc = "a" Then
      cta = cta + 1
    ElseIf abc = "b" Then
      ctb = ctb + 1
    Else
      ctc = ctc + 1
    End If

  Next i

  Debug.Print "a:" & cta; " b:" & ctb; " c:" & ctc

End Sub

'ALPHABET_FREQUENCYの実行結果:
'a:3335 b:3349 c:3316

ALPHABET() には乱数が組込まれているので、実行結果は毎回異なりますが、どの文字もおおよそ 3333 回ぐらいになっているはずです。

コメント

  1. あとりえこばと より:

    【AI解説】VBAのAsc

    [ChatGPT] VBAのAsc関数は、指定された文字のUnicodeコードポイントを返す関数です。Unicodeコードポイントとは、各文字に対して一意な数字で表される値です。Asc関数は以下のような構文を持っています:

    Asc(Character)

    ここで、Characterは解析したい文字を表す引数です。Asc関数を使うと指定された文字のUnicodeコードポイントを取得することができます。以下の例を見てみましょう:

    Sub AscSample()
        Dim code As Integer
        code = Asc("A")
    End Sub

    この例では、文字”A”のUnicodeコードポイントを取得しています。変数codeには、文字”A”のUnicodeコードポイントである65が格納されます。Asc関数は、単一の文字に対してのみ使用することができます。文字列全体ではなく、最初の文字のコードポイントを返します。したがって、次のような例では、最初の文字のコードポイントが取得されます:

    Sub AscSample2()
        Dim code As Integer
        code = Asc("Hello")
    End Sub

    この例では、文字列”Hello”の最初の文字である”H”のUnicodeコードポイントが取得されます。Asc関数は、主に文字の比較や順序付けに使用されます。Unicodeコードポイントを利用して、文字列を比較したり、ソートしたりすることができます。ただし、VBAではUnicodeに対応しているため、基本的にはほとんどの文字のUnicodeコードポイントを取得することができます。ただし、いくつかの特殊な文字については、正確なコードポイントを取得することができない場合があります。以上が、VBAのAsc関数についての解説です。Asc関数を使用すると、文字のUnicodeコードポイントを取得することができます。

    【AI解説】VBAのChr, ChrW

    [ChatGPT] VBAのChr関数は、指定されたUnicodeコードポイントに対応する文字を返す関数です。Unicodeコードポイントとは、各文字に割り当てられた一意の数字です。Chr関数は以下のような構文を持っています:

    Chr(Unicode)

    ここで、UnicodeはUnicodeコードポイントを表す整数値の引数です。Chr関数を使うと、指定されたUnicodeコードポイントに対応する文字を取得することができます。以下の例を見てみましょう:

    Sub ChrSample()
        Dim character As String
        character = Chr(65)
    End Sub

    この例では、Unicodeコードポイントが65である文字を取得しています。変数characterには、Unicodeコードポイント65に対応する文字”A”が格納されます。Chr関数は、単一の文字を返します。Unicodeコードポイントを指定して、対応する文字を取得することができます。Chr関数の引数には、0から65535までの整数値を指定することができます。Unicodeコードポイントがこの範囲外の場合、エラーが発生します。また、ChrW関数というバリエーションもあります。ChrW関数は、Chr関数と同様にUnicodeコードポイントに対応する文字を返しますが、引数に渡す値は16ビットの整数値です。これにより、ChrW関数を使用して、範囲が0から65535のUnicode文字を取得することができます。

    Sub ChrWSample()
        Dim character As String
        character = ChrW(9731)
    End Sub

    この例では、Unicodeコードポイントが9731である文字を取得しています。変数characterには、Unicodeコードポイント9731に対応する特定の絵文字が格納されます。Chr関数やChrW関数は、主にUnicodeコードポイントに基づいて文字を生成するために使用されます。特定のコードポイントに対応する文字を取得する場合や、特殊な文字を含む文字列を生成する場合に便利です。以上が、VBAのChr関数についての解説です。Chr関数を使用すると、Unicodeコードポイントに対応する文字を取得することができます。