文字コード

文字コードとは、人がわかる文字、たとえば「A」などを、パソコンの中で表現している数値のことです。数値関数編の16進数の説明で「16進数00からFFの256種でAからZまでの対応がまかなえた」とかきました。この対応表に合わせて、パソコンのなかでは、文字を文字コードにして覚えています。以下文字コード表について説明します。16進数00-FFを縦0-F、横0-Fの表にして考えてみましょう。

図5:文字コードの枠組み

図5のように「*」の場所を&H31とします。横縦の表現です。図5の表のなかにA-Zの記号を割り当てました。ASCIIコード(アスキーコード)と言われるものです。現在、半角英数はすべてASCIIコードで割り当てられています。以下ASCIIコード表です(図6)。

図6:ASCIIコード表

図5の「*」の場所&H31は「1」という文字に割り当てられています。以下、文字を文字コードに変換するASC関数、文字コードを文字に変換するChr関数について説明します。

Asc関数

文字を文字コードに変換します。図6のASCIIコード表と見比べながらみていきましょう。リスト6をみてください。

[リスト6]Rei_Asc(文字列関数.xlsm)

 Sub Rei_Asc()
     a = "A"
     a0 = Asc(a)            '(1)結果:65(&H41)
     b = "a"
     b0 = Asc(b)            '(2)結果:97(&H61)

     MsgBox (a0 & "(&H" & Hex(a0) & ")")
     MsgBox (b0 & "(&H" & Hex(b0) & ")")

 End Sub

(1)で「A」を文字コードに、(2)で「a」を文字コードに変換しています。「A」はASCII表の「4」の列の「1」の行にかいてあるので、16進数で&H41となります。これを10進数であらわすと65になります。

Chr関数

文字コードを文字に変換します。リスト6で表示した文字コードを今度は文字に変換してみます。

[リスト7]Rei_Chr(文字列関数.xlsm)

Sub Rei_Chr()
    a0 = &H41
    a = Chr(a0)         '(1)結果:A
    b0 = &H61
    b = Chr(b0)         '(2)結果:a

    MsgBox (a)
    MsgBox (b)

End Sub

(1)で&H41を文字に、(2)で&H61を文字に変換しています。ASCII表のとおりになっています。現在では、ASCII表を詳しく知らなくてもプログラムは組めます。しかし、パソコンの内部を少しでも知ることでよりパソコンと仲良くなれる気がします。

どんなときにChr、Asc関数を使うのでしょう。実際にプログラムを組む時はあまり使用しないかもしれません。王道ではないのですが、以下のような使い方もできます。

マクロの記録でセルA1に「A」B1に「B」と書くマクロを作ってみましょう。以下のマクロが作成されます。

[リスト8]Macro1(文字列関数.xlsm)

 Sub Macro1()
'
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "A"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "B"
End Sub

Range関数を使っています。セルの指定は「A1」「B1」です。もし続けてA1からZ1まで「A」から順に「Z」までを入れていきたい時、どうしましょうか?。同じ命令をZまで続けてかいてももちろんOKです。せっかくASCIIコードがわかったので、ASCIIコード表をみてみましょう。

「A」は65(&H41)でした。「B」は66(&H42)・・・「O」は79(&H4F)「P」は80(&H50)・・「Z」は90(&H5A)です。+1ずつ増えています。続いた数値はFor文で処理できます。リスト8のマクロを「Z1」までセットするように追加したものを以下に示します。

[リスト9]Asc_Chr(文字列関数.xlsm)

Sub Asc_Chr()
    For i = 65 To 90
        s = Chr(i)
        Range(s & "1").Select
        ActiveCell.FormulaR1C1 = s  '(1)
        Range(s & "2").Select
        ActiveCell.FormulaR1C1 = Asc(s) '(2)
    Next i
End Sub

(1)でChr関数を使ってASCIIコードを文字に、(2)で表示した文字をASCIIコードに変換して表示しました。今回のようにセルの位置指定をRange関数を使って順に設定する場合はとても便利です。