更新日:、 作成日:

VBA StrConv 関数:全角と半角を変換する

はじめに

Excel VBA マクロの StrConv 関数から全角と半角を変換する方法を紹介します。

StrConv 関数は、文字列の文字種を変換します。

なら を返します。半角に変換できます。 なら を返します。全角に変換できます。

A なら a を返します。小文字に変換できます。a なら A を返します。大文字に変換できます。

Unicode (UTF-16) を Shift_JIS に変換できます。

文字列を大文字小文字、全角半角、ひらがなカタカナなどに変換したいときなどに使用します。

文字列を変換するには「文字列を変換する」をご覧ください。

StrConv 関数の引数と戻り値

StrConv(文字列, 文字種)
文字列を指定した文字種に変換します。

引数「文字列」文字列を指定します。
引数「文字種」変換する文字種を組み合わせて指定します。
戻り値の型文字列型 (String)

引数「文字種」の値

名前 変換
vbUpperCase1大文字に変換します。
vbLowerCase2小文字に変換します。
vbProperCase3各単語の先頭の文字を大文字に変換します。
vbWide4半角文字を全角文字に変換します。
vbNarrow8全角文字を半角文字に変換します。
vbKatakana16ひらがなをカタカナに変換します。
vbHiragana32カタカナをひらがなに変換します。
vbUnicode64システムの既定のコードページ (Shift_JIS) から Unicode (UTF-16) に変換します。
vbFromUnicode128Unicode (UTF-16) からシステムの既定のコードページ (Shift_JIS) に変換します。

解説

引数「文字列」の変換されない文字はそのまま返します。

引数「文字種」に vbUpperCase Or vbWide のように Or を使用して、複数の文字種をまとめて変換できます。

vbWidevbNarrowvbKatakanavbHiragana のように組み合わせられないときは「エラー 5 プロシージャの呼び出し、または引数が不正です。」が発生します。

VBA の文字コードは Unicode (UTF-16) です。vbFromUnicode を指定して Shift_JIS に変換できます。

LenB 関数」を使用して文字のバイト数を取得するとき、文字コードが Unicode (UTF-16) なら 1 文字 2 バイトで ABC は 6 バイトになります。これを半角文字だけ 1 バイトとするには vbFromUnicode から Shift_JIS に変換します。

VBA のコードに Shift_JIS に存在しない文字 などを入力すると ? に文字化けします。

Unicode 文字を入力や変換するには「文字列を変換する」をご覧ください。

システムの既定のコードページ

エクスプローラーを表示し、アドレスバーに intl.cpl を入力して Enter キーを入力します。

[管理] タブから [システムロケールの変更] をクリックします。

現在のシステムロケールが [日本語 (日本)] なら Shift_JIS のことです。vbFromUnicode から Shift_JIS に変換できます。

1

使用例

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