StrConv関数で文字列を変換する方法
-
Contents
- 今回の目標
- StrConv関数について
- 文字列を変換する
- 複数の変換を同時に行う
- 関連リンク
今回の目標
「文字列の ひらがな を カタカナ に変換したい!」や「大文字のアルファベットを小文字に変換できないの?」と疑問を持ったあなたへ。
この記事では、StrConv関数の使い方を丁寧に解説します!
StrConv関数の変換前と変換後の使用サンプルつきです。
目標リスト
- StrConv関数について、理解する
- ひらがな から 半角カタカナ など、定数の組み合わせを理解する
StrConv関数について
StrConv関数とは
StrConv関数は、文字の変換を行います。
大文字と小文字や、全角と半角、ひらがなとカタカナを変換します。
-
大文字 / 小文字を変換する
例)hello world → HELLO WORLD
HELLO WORLD → hello world
-
単語の頭文字のみを大文字に変換する
※ 複数の単語がある場合、そのすべてを大文字に変換します。
例)hello world → Hello World
-
全角文字 / 半角文字 を変換する
例)Hello World → Hello World
Hello World → Hello World
コンニチハ! → コンニチハ!
コンニチハ! → コンニチハ!
-
ひらがな / カタカナ を変換する
例)こんにちは! → コンニチハ!
コンニチハ! → こんにちは!
StrConv関数の引数一覧と戻り値
StrConv関数の構文
StrConv(string, conversion, LCID)
StrConv関数の引数一覧
※一部、Microsoft社のリファレンスを参照しています。
【Microsoft公式】
StrConv 関数
名前 | 省略 | 規定値 | 説明 |
---|---|---|---|
string | 不可 | - | 変換対象の文字列 |
conversion | 不可 | - | どの種別の変換を行うか |
LCID | 可能 | -1 | 日本語・英語の変換なら、使用しません。 |
引数「conversion」の定数一覧です。
名前 | 値 | 説明 |
---|---|---|
vbUpperCase | 1 | 大文字に変換します。 |
vbLowerCase | 2 | 小文字に変換します。 |
vbProperCase | 3 | 全ての単語の1文字目を大文字に変換します。 |
vbWide | 4 | 半角文字を全角文字に変換します。 |
vbNarrow | 8 | 全角文字を半角文字に変換します。 |
vbKatakana | 16 | "ひらがな" を "カタカナ"に変換します。 |
vbHiragana | 32 | "カタカナ" を "ひらがな"に変換します。 |
vbUnicode | 64 | 文字列を Unicode に変換します。 ※Macintosh では使用不可 |
vbFromUnicode | 128 | Unicode からシステムの既定のコードに変換します。 ※Macintosh では使用不可 |
文字列を変換する
1.大文字/小文字を変換する
StrConv関数の第二引数に「vbUpperCase」を指定すると、文字列中のアルファベットの小文字を大文字に変換します。
一方、vbLowerCase を指定すると、アルファベットの大文字を小文字に変換します。
対象となるのは、基本的にアルファベットで、ひらがな・カタカナ・漢字は変換対象外です。
サンプルコード
Sub StrConv_UpperLower()
Dim s As String
s = "Hello World"
Debug.Print "Before :" & s
'小文字 → 大文字 に変換する
Debug.Print "vbUpperCase :" & StrConv(s, vbUpperCase)
'大文字 → 小文字 に変換する
Debug.Print "vbLowerCase :" & StrConv(s, vbLowerCase)
End Sub
Before:Hello World
vbUpperCase:HELLO WORLD
vbLowerCase:hello world
2.各単語の先頭を大文字に変換する
StrConv関数の第二引数に「vbProperCase」を指定すると、文字列中の各単語の先頭文字を大文字にし、それ以外の文字を小文字に変換します。
例えば、「yamada taro」なら「Yamada Taro」となります。
サンプルコード
Sub StrConv_Proper()
Dim s As String
s = "hello world"
Debug.Print "Before :" & s
'各単語の先頭を大文字に変換する
Debug.Print "vbProperCase :" & StrConv(s, vbProperCase)
End Sub
Before:hello world
vbProperCase:Hello World
3.全角文字/半角文字を変換する
StrConv関数の第二引数に「vbWide」を指定すると、文字列中の半角文字を全角文字に変換します。
一方、「vbNarrow」を指定すると、全角文字を半角文字に変換します。
対象となるのは、アルファベット・数字・カタカナ であり、漢字やひらがなは変換対象外です。
サンプルコード
Sub StrConv_Wide_Narrow()
Dim s1 As String
Dim s2 As String
s1 = "Hello World"
s2 = "Hello World"
'半角 → 全角 に変換する
Debug.Print "--- s1 ---"
Debug.Print "Before:" & s1
Debug.Print "vbWide:" & StrConv(s1, vbWide)
'全角 → 半角 に変換する
Debug.Print "--- s2 ---"
Debug.Print "Before :" & s2
Debug.Print "vbNarrow:" & StrConv(s2, vbNarrow)
End Sub
--- s1 ---
Before:Hello World
vbWide:Hello World
--- s2 ---
Before:Hello World
vbNarrow:Hello World
4.ひらがな/全角カタカナを変換する
StrConv 関数の第二引数に「vbKatakana」を指定すると、文字列中の "ひらがな" が "全角カタカナ" に変換されます。
一方、「vbHiragana」を指定すると、文字列中の "全角カタカナ" が "ひらがな" に変換されます。
対象となるのは、全角カタカナ であり、半角カタカナ は変換対象外です。
半角カタカナ と ひらがな の変換は、「複数の変換を同時に行う」に記載しました。
サンプルコード
Sub StrConv_HiraKata()
Dim s1 As String
Dim s2 As String
s1 = "こんにちは!"
s2 = "コンニチハ!"
'ひらがな → カタカナ に変換する
Debug.Print "--- s1 ---"
Debug.Print "Before:" & s1
Debug.Print "vbWide:" & StrConv(s1, vbKatakana)
'カタカナ → ひらがな に変換する
Debug.Print "--- s2 ---"
Debug.Print "Before :" & s2
Debug.Print "vbNarrow:" & StrConv(s2, vbHiragana)
End Sub
--- s1 ---
Before:こんにちは!
vbWide:コンニチハ!
--- s2 ---
Before:コンニチハ!
vbNarrow:こんにちは!
5.文字コードを変換する
StrConv 関数の第二引数に vbUnicode を指定すると、文字列を Unicode(UTF-16 LE形式)のバイト配列に変換できます。
一方、vbFromUnicode を指定すると、文字列を システム既定のコードページ(日本語WindowsではShift-JIS/CP932など)のバイト配列に変換できます。
なお、どちらの指定でも、戻り値は Byte型の配列 にです。
サンプルコード
Sub StrConv_CodeChange()
Dim s As String
s = "あいうABC"
Debug.Print "Before:" & s
StrConv_vbUnicode s
StrConv_vbFromUnicode s
End Sub
' Unicode(UTF-16LE) のバイト列を取得
Sub StrConv_vbUnicode(ByVal s As String)
Dim b() As Byte
b = StrConv(s, vbUnicode)
Debug.Print "vbUnicode bytes:" & BytesToHex(b)
End Sub
' 既定コードページ(日本語WindowsならCP932/Shift-JIS)のバイト列へ
Sub StrConv_vbFromUnicode(ByVal s As String)
Dim b() As Byte
b = StrConv(s, vbFromUnicode)
Debug.Print "vbFromUnicode bytes:" & BytesToHex(b)
End Sub
' 補助:バイト配列を16進で可視化
Private Function BytesToHex(ByRef b() As Byte) As String
Dim i As Long, tmp As String
For i = LBound(b) To UBound(b)
tmp = tmp & Right("0" & Hex$(b(i)), 2) & " "
Next
BytesToHex = Trim(tmp)
End Function
Before:あいうABC
vbUnicode bytes:42 00 30 00 44 00 30 00 46 00 30 00 41 00 00 00 42 00 00 00 43 00 00 00
vbFromUnicode bytes:82 A0 82 A2 82 A4 41 42 43
複数の変換を同時に行う
1.定数を組み合わせると、記載を簡略化できる
一部の定数は 「+」演算子 を使って組み合わせることができます。
例えば、"カタカナ" を "ひらがな" に変換するには、StrConv 関数の第2引数に「vbHiragana」を指定すれば十分です。
しかし、"半角カタカナ" を "ひらがな" に変換する場合は、まず 半角→全角(vbWide)に変換してから、カタカナ→ひらがな(vbHiragana)にする必要があります。
このとき、「vbWide + vbHiragana」のように定数を組み合わせて指定することが出来ます。
2.半角カタカナ を ひらがな に変換する
StrConv 関数の第二引数に「vbHiragana + vbWide」を指定すると、文字列中の "半角カタカナ" が "ひらがな" に変換されます。
サンプルコード
Sub StrConv_Comb1()
Dim buf As Variant
Dim str As String
str = "コンニチハ!"
'半角カタカナ → ひらがな
buf = StrConv(str, vbHiragana + vbWide)
Debug.Print "Before:" & str
Debug.Print "vbHiragana + vbWide :" & buf
End Sub
Before:コンニチハ!
vbHiragana + vbWide :こんにちは!
3.ひらがな を 半角カタカナ に変換する
StrConv 関数の第二引数に「vbKatakana + vbNarrow」を指定すると、文字列中の "ひらがな" が "半角カタカナ" に変換されます。
サンプルコード
Sub StrConv_Comb2()
Dim buf As Variant
Dim str As String
str = "こんにちは!"
'ひらがな → 半角カタカナ
buf = StrConv(str, vbKatakana + vbNarrow)
Debug.Print "Before:" & str
Debug.Print "vbKatakana + vbNarrow:" & buf
End Sub
Before:こんにちは!
vbKatakana + vbNarrow:コンニチハ!
4.半角小文字アルファベット を 全角大文字アルファベットに変換
StrConv 関数の第二引数に「vbUpperCase + vbWide」を指定すると、文字列中の "半角小文字アルファベット" が "全角大文字アルファベット" に変換されます。
サンプルコード
Sub StrConv_Comb3()
Dim buf As Variant
Dim str As String
str = "ABCabc"
'半角小文字アルファベットから全角大文字アルファベットに変換
buf = StrConv(str, vbUpperCase + vbWide)
Debug.Print "Before:" & str
Debug.Print "vbUpperCase + vbWide:" & buf
End Sub
Before:ABCabc
vbUpperCase + vbWide:ABCABC
5.全角大文字アルファベット を 半角小文字アルファベットに変換
StrConv 関数の第二引数に「vbLowerCase + vbNarrow」を指定すると、文字列中の "全角大文字アルファベット" が "半角小文字アルファベット" に変換されます。
サンプルコード
Sub StrConv_Comb4()
Dim buf As Variant
Dim str As String
str = "ABCabc"
'全角大文字アルファベットから半角小文字アルファベットに変換
buf = StrConv(str, vbLowerCase + vbNarrow)
Debug.Print "Before:" & str
Debug.Print "vbLowerCase + vbNarrow:" & buf
End Sub
Before:ABCabc
vbLowerCase + vbNarrow:abcabc