【VBA】Asc, Chr, ChrB, ChrW関数の徹底解説【文字コード⇔文字】
概要
VBA(Visual Basic for Applications)は、Microsoft Office製品などで利用されるプログラミング言語です。VBAでは文字列や文字コードを扱うための便利な関数がいくつか用意されています。ここでは、Asc
、Chr
、ChrB
、およびChrW
という4つの関数について、初心者にも分かりやすく、例を多く交えて詳しく解説します。
これらの関数は、文字とその数値(コード)との間の変換を行うために使用されます。例えば、ある文字のコードを調べたり、逆にコードから文字を生成したりすることが可能です。VBAでのプログラミングにおいて、文字コードの理解はテキスト処理や国際化対応の際に非常に重要です。
Asc関数について
Asc(string)
関数は、引数に渡した文字列の先頭の1文字の文字コード(数値)を返します。アルファベット、数字、記号、さらには日本語なども内部的にはそれぞれのコードを持っており、Asc
を使用することでそのコードを取得できます。
例1: 英大文字の「A」のコード
Sub ExampleAsc1() Dim code As Integer code = Asc("A") Debug.Print "Aのコードは " & code ' 出力結果: Aのコードは 65 End Sub
例2: 英小文字の「a」のコード
Sub ExampleAsc2() Dim code As Integer code = Asc("a") Debug.Print "aのコードは " & code ' 出力結果: aのコードは 97 End Sub
注意点として、Asc
は常に文字列の先頭1文字だけを対象にするため、複数文字の文字列を渡すと最初の文字のコードのみが返されます。また、空の文字列を渡すとエラーになるので、事前に文字列が空でないかのチェックが必要です。
Chr関数について
Chr(code)
関数は、指定した数値(コード)に対応する文字を返す関数です。引数として 0 から 65535 までの値を指定でき、対応する文字が返されます。VBAにおいては、内部的にUnicodeが使われているため、多くの場合はChr
で十分な処理が可能です。
例1: 数値65に対応する文字
Sub ExampleChr1() Dim character As String character = Chr(65) Debug.Print "65に対応する文字は " & character ' 出力結果: 65に対応する文字は A End Sub
例2: 数値97に対応する文字
Sub ExampleChr2() Dim character As String character = Chr(97) Debug.Print "97に対応する文字は " & character ' 出力結果: 97に対応する文字は a End Sub
さらに、記号や特殊文字も同様に取得可能です。例えば、数値33は「!」に対応しています。
Sub ExampleChr3() Dim character As String character = Chr(33) Debug.Print "33に対応する文字は " & character ' 出力結果: 33に対応する文字は ! End Sub
ChrB関数について
ChrB(code)
関数は、Chr
関数と同様に指定された数値に対応する文字を返しますが、返されるのはバイト単位の文字です。これは主にマルチバイト文字(例えばShift-JISのようなエンコーディング)を扱う際に利用されます。ChrB
はANSIコード(0~255の範囲)の操作に適しており、環境によってはマルチバイト文字を扱う場合に注意が必要です。
通常、ASCIIコードやシングルバイトの文字を扱う場合にはChr
で十分ですが、古いシステムや特定のエンコーディング環境下ではChrB
が用いられることがあります。
例: 数値65に対応するバイト文字
Sub ExampleChrB() Dim character As String character = ChrB(65) Debug.Print "ChrB(65)の結果: " & character ' 出力結果: A(通常のChrと同じ結果になる場合が多い) End Sub
※ 環境によっては、ChrB
とChr
の結果が同じ場合もあります。マルチバイト文字を扱う場合は、エンコーディングの違いに注意してください。
ChrW関数について
ChrW(code)
関数は、Unicodeに対応した文字を返すための関数です。Chr
関数も内部的にはUnicodeを扱うことが多いですが、ChrW
は明示的にUnicodeコードポイントを指定して文字を取得するために利用されます。これにより、国際化対応のアプリケーションなどでより正確な文字変換が可能となります。
例: 数値12354に対応するひらがな「あ」
Sub ExampleChrW() Dim character As String character = ChrW(12354) Debug.Print "ChrW(12354)の結果: " & character ' 出力結果: あ End Sub
このように、ChrW
を用いることで、ASCII以外のUnicode文字も正しく取得できます。多言語対応のプログラムを書く場合には非常に便利な関数です。
実践的な使用例
以下は、複数の関数を組み合わせた簡単なサンプルコードです。このコードは、文字列の各文字をその文字コードに変換し、逆に文字コードから文字へ変換する動作を示しています。
Sub DemoCharacterConversion() Dim originalText As String Dim i As Integer Dim codeValue As Integer Dim rebuiltText As String originalText = "Hello VBA!" rebuiltText = "" Debug.Print "元の文字列: " & originalText ' 各文字のコードを表示し、Chr関数で再構築する For i = 1 To Len(originalText) codeValue = Asc(Mid(originalText, i, 1)) Debug.Print "文字: " & Mid(originalText, i, 1) & " → コード: " & codeValue rebuiltText = rebuiltText & Chr(codeValue) Next i Debug.Print "再構築した文字列: " & rebuiltText End Sub
このサンプルでは、文字列「Hello VBA!」の各文字について、Asc
関数で文字コードを取得し、そのコードからChr
関数を使って再び文字を生成しています。これにより、元の文字列と再構築された文字列が同じであることを確認できます。
また、必要に応じてChrW
を使ってUnicode文字の処理や、ChrB
を使ったバイト単位の処理も同様の方法で行うことができます。
まとめ
今回は、VBAにおける文字コード関連の関数であるAsc
、Chr
、ChrB
、およびChrW
について詳しく解説しました。Asc
は文字列の先頭文字のコードを取得し、Chr
とChrW
はコードから文字を生成するために使用されます。ChrB
はバイト単位の処理に利用され、環境やエンコーディングによって使い分ける必要があります。
これらの関数を理解することで、文字列操作や国際化対応、データのエンコード・デコードなど、さまざまな用途に応用することができます。ぜひ、実際のプロジェクトで試してみて、VBAプログラミングの幅を広げてください。