更新日:、 作成日:
VBA StrConv 関数:全角と半角を変換する
はじめに
Excel VBA マクロの StrConv 関数から全角と半角を変換する方法を紹介します。
StrConv 関数は、文字列の文字種を変換します。
ア なら ア を返します。半角に変換できます。ア なら ア を返します。全角に変換できます。
A なら a を返します。小文字に変換できます。a なら A を返します。大文字に変換できます。
Unicode (UTF-16) を Shift_JIS に変換できます。
文字列を大文字小文字、全角半角、ひらがなカタカナなどに変換したいときなどに使用します。
StrConv 関数の引数と戻り値
StrConv(文字列, 文字種)
文字列を指定した文字種に変換します。
引数「文字列」 | 文字列を指定します。 |
引数「文字種」 | 変換する文字種を組み合わせて指定します。 |
戻り値の型 | 文字列型 (String) |
引数「文字種」の値
名前 | 値 | 変換 |
vbUpperCase | 1 | 大文字に変換します。 |
vbLowerCase | 2 | 小文字に変換します。 |
vbProperCase | 3 | 各単語の先頭の文字を大文字に変換します。 |
vbWide | 4 | 半角文字を全角文字に変換します。 |
vbNarrow | 8 | 全角文字を半角文字に変換します。 |
vbKatakana | 16 | ひらがなをカタカナに変換します。 |
vbHiragana | 32 | カタカナをひらがなに変換します。 |
vbUnicode | 64 | システムの既定のコードページ (Shift_JIS) から Unicode (UTF-16) に変換します。 |
vbFromUnicode | 128 | Unicode (UTF-16) からシステムの既定のコードページ (Shift_JIS) に変換します。 |
スポンサーリンク
解説
引数「文字列」の変換されない文字はそのまま返します。
引数「文字種」に vbUpperCase Or vbWide のように Or を使用して、複数の文字種をまとめて変換できます。
vbWide と vbNarrow や vbKatakana と vbHiragana のように組み合わせられないときは「エラー 5 プロシージャの呼び出し、または引数が不正です。」が発生します。
VBA の文字コードは Unicode (UTF-16) です。vbFromUnicode を指定して Shift_JIS に変換できます。
「LenB 関数」を使用して文字のバイト数を取得するとき、文字コードが Unicode (UTF-16) なら 1 文字 2 バイトで ABC は 6 バイトになります。これを半角文字だけ 1 バイトとするには vbFromUnicode から Shift_JIS に変換します。
VBA のコードに Shift_JIS に存在しない文字 頰 などを入力すると ? に文字化けします。
システムの既定のコードページ
エクスプローラーを表示し、アドレスバーに intl.cpl を入力して Enter キーを入力します。
[管理] タブから [システムロケールの変更] をクリックします。
現在のシステムロケールが [日本語 (日本)] なら Shift_JIS のことです。vbFromUnicode から Shift_JIS に変換できます。
使用例
StrConv 関数の使用例を紹介します。
全角半角や大文字小文字を変換する
全角半角や大文字小文字を変換します。
Dim s As String
s = StrConv("abc", vbUpperCase) ' 大文字
Debug.Print(s) ' ABC
s = StrConv("ABC", vbLowerCase) ' 小文字
Debug.Print(s) ' abc
s = StrConv("abc def", vbProperCase) ' 先頭を大文字
Debug.Print(s) ' Abc Def
s = StrConv("ABC アイウ", vbWide) ' 全角
Debug.Print(s) ' ABC アイウ
s = StrConv("ABC アイウ", vbNarrow) ' 半角
Debug.Print(s) ' ABC アイウ
s = StrConv("あいう", vbKatakana) ' カタカナ
Debug.Print(s) ' アイウ
s = StrConv("アイウ アイウ", vbHiragana) ' ひらがな
Debug.Print(s) ' あいう アイウ
s = StrConv("abc", vbUpperCase Or vbWide) ' 大文字と全角
Debug.Print(s) ' ABC
s = StrConv("ABC", vbLowerCase Or vbNarrow) ' 小文字と半角
Debug.Print(s) ' abc
半角文字を 1 バイトとして取得する
「LenB 関数」を使用して、文字列のバイト数を取得できます。
Unicode (UTF-16) の文字はすべて 2 バイトです。
Shift_JIS の半角文字は 1 バイトで、全角文字は 2 バイトです。
Dim i As Integer
i = LenB("ABC")
Debug.Print(i) ' 6, UTF-16
i = LenB("ABC")
Debug.Print(i) ' 6, UTF-16
Dim s As String
s = StrConv("ABC", vbFromUnicode) ' UTF-16 を Shift_JIS に変換
i = LenB(s)
Debug.Print(i) ' 3, Shift_JIS
s = StrConv("ABC", vbFromUnicode) ' UTF-16 を Shift_JIS に変換
i = LenB(s)
Debug.Print(i) ' 6, Shift_JIS
s = StrConv("ABC", vbFromUnicode) ' UTF-16 を Shift_JIS に変換
s = StrConv(s, vbUnicode) ' Shift_JIS を UTF-16 に変換
i = LenB(s)
Debug.Print(i) ' 6, UTF-16
s = StrConv("ABC", vbFromUnicode) ' UTF-16 を Shift_JIS に変換
s = StrConv(s, vbUnicode) ' Shift_JIS を UTF-16 に変換
i = LenB(s)
Debug.Print(i) ' 6, UTF-16
スポンサーリンク