VBA Chr 関数:文字コードを文字に変換する

はじめに

Excel VBA マクロの Chr 関数と ChrW 関数から文字コードを文字に変換する方法を紹介します。

Chr 関数は、指定した文字コード (Shift_JIS) を対応する文字に変換します。

ChrW 関数は、指定した Unicode (UTF-16) を対応する文字に変換します。

半角文字のなら 0 ~ 255 の範囲を指定します。65 なら A を返します。ASCII コードと同じ値です。

Unicode のサロゲートペア文字 𩸽 を入力するには、上位 -10137 と下位 -8643 を変換してから結合します。

文字コードを文字に変換したいときに使用します。

文字コードを変換するには「文字コードを変換や判定する」をご覧ください。
  • 目次
    • Chr 関数、ChrW 関数
    • 解説
    • 文字コード一覧
    • 使用例

Chr 関数、ChrW 関数

Chr(文字コード)
文字コード (Shift_JIS) を対応する文字に変換します。

引数「文字コード」半角文字は 0 ~ 255 の範囲を指定します。
全角文字は -32768 ~ 65536 の範囲を指定します。
戻り値の型文字列型 (String)

ChrW(文字コード)
文字コード (UTF-16) を対応する文字に変換します。

引数「文字コード」Unicode (UTF-16) の値を指定します。
戻り値の型文字列型 (String)

解説

Chr 関数

Shift_JIS の文字コードから文字に変換します。

引数「文字コード」が 0 ~ 255 のときは半角で、A1 などに変換されます。ASCII コードと同じ値です。

引数「文字コード」がそれ以外のときは全角で、 などに変換されます。それ以外のひらがなやカタカナや漢字やアルファベットのことです。

コードに直接入力できない「特殊文字と制御文字」を入力できます。

Shift_JIS の文字コードを取得するには「Asc 関数」を使用します。

ChrW 関数

Unicode (UTF-16) を文字に変換します。VBA のコードに Shift_JIS に存在しない Unicode 文字 などを入力すると、すべて ? に文字化けします。

引数「文字コード」が 0 ~ 127 のときは半角英数字で、A1 などに変換されます。ASCII コードと同じ値です。

Unicode のサロゲートペア文字は 2 文字として扱います。𩸽 を入力するには上位 -10137 と下位 -8643 を変換してから結合します。負の値になっているのは「AscW 関数」の戻り値の型が Integer のためです。

上位と下位を結合した 171581 (&H29E3D) は文字に変換できません。Excel の「エクセル UNICHAR 関数:Unicode を文字に変換する」を使用して入力できます。

Unicode の取得や変換については「文字コードを変換や判定する」をご覧ください。

インターネット上にある文字コード表は 16 進数になっていることが多いです。VBA で 16 進数を入力するには &H3042 のように &H を頭に付けます。

Unicode (UTF-16) の文字コードを取得するには「AscW 関数」を使用します。

文字コード一覧

Chr 関数の引数「文字コード」に 0 ~ 255 を指定して、変換される文字の一覧です。

[] で囲っているのは特殊文字の略称です。() で囲っているのは VBA の定数です。

文字コード 文字
0Null 文字 (vbNullChar)
1[SOH]
2[STX]
3[ETX]
4[EOT]
5[ENQ]
6[ACK]
7[BEL]
8バックスペース (vbBack)
9タブ (vbTab)
10ラインフィード (vbLf)
11垂直タブ (vbVerticalTab)
12フォームフィード (vbFormFeed)
13キャリッジリターン (vbCr)
14[SO]
15[SI]
16[DLE]
17[DC1]
18[DC2]
19[DC3]
20[DC4]
21[NAK]
22[SYN]
23[ETB]
24[CAN]
25[EM]
26[SUB]
27[ESC]
28[FS]
29[GS]
30[RS]
31[US]
32スペース
33!
34"
35#
36$
37%
38&
39'
40(
41)
42*
43+
44,
45-
46.
47/
480
491
502
513
524
535
546
557
568
579
58:
59;
60<
61=
62>
63?
64@
65A
66B
67C
68D
69E
70F
71G
72H
73I
74J
75K
76L
77M
78N
79O
80P
81Q
82R
83S
84T
85U
86V
87W
88X
89Y
90Z
91[
92\
93]
94^
95_
96`
97a
98b
99c
100d
101e
102f
103g
104h
105i
106j
107k
108l
109m
110n
111o
112p
113q
114r
115s
116t
117u
118v
119w
120x
121y
122z
123{
124|
125}
126~
127[DEL]
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191ソ
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255

使用例

Chr 関数

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

Dim s As String
s = Chr(48)
Debug.Print(s) ' 0

s = Chr(57)
Debug.Print(s) ' 9

s = Chr(65)
Debug.Print(s) ' A

s = Chr(90)
Debug.Print(s) ' Z

s = Chr(97)
Debug.Print(s) ' a

s = Chr(122)
Debug.Print(s) ' z

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

s = Chr(&H82A0)
Debug.Print(s) ' あ

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

Dim i As Integer
i = Asc("0")
Debug.Print(i) ' 48

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

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

ChrW 関数

Unicode (UTF-16) を文字に変換する。

Dim s As String
s = ChrW(48)
Debug.Print(s) ' 0

s = ChrW(57)
Debug.Print(s) ' 9

s = ChrW(65)
Debug.Print(s) ' A

s = ChrW(90)
Debug.Print(s) ' Z

s = ChrW(97)
Debug.Print(s) ' a

s = ChrW(122)
Debug.Print(s) ' z

s = ChrW(12354)
Debug.Print(s) ' あ

s = ChrW(38960)
Range("A1").Value = s ' 頰、Unicode 文字

サロゲートペア文字の上位と下位を結合して変換する。

Range("A1").Value = ChrW(-10137) & ChrW(-8643) ' 𩸽、サロゲートペア文字

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("A2").Value = ChrW(high) & ChrW(low) ' 𩸽

サロゲートペア文字の結合された Unicode (UTF-16) を文字に変換する。

Range("A1").Value = WorksheetFunction.Unichar(171581)  ' 𩸽
Range("A1").Value = WorksheetFunction.Unichar(&H29E3D) ' 𩸽

Range("A2").Value = WorksheetFunction.Unichar(128515)  ' 😃
Range("A2").Value = WorksheetFunction.Unichar(&H1F603) ' 😃