StrConv関数で文字列を変換する方法

今回の目標

「文字列の ひらがな を カタカナ に変換したい!」や「大文字のアルファベットを小文字に変換できないの?」と疑問を持ったあなたへ。
この記事では、StrConv関数の使い方を丁寧に解説します!
StrConv関数の変換前と変換後の使用サンプルつきです。

目標リスト

  • StrConv関数について、理解する
  • ひらがな から 半角カタカナ など、定数の組み合わせを理解する

StrConv関数について

StrConv関数とは

StrConv関数は、文字の変換を行います。
大文字と小文字や、全角と半角、ひらがなとカタカナを変換します。

StrConv関数の引数一覧と戻り値

StrConv関数の構文

StrConv(string, conversion, LCID)

StrConv関数の引数一覧

※一部、Microsoft社のリファレンスを参照しています。
 【Microsoft公式】 StrConv 関数

名前省略規定値説明
string不可-変換対象の文字列
conversion不可-どの種別の変換を行うか
LCID可能-1日本語・英語の変換なら、使用しません。

引数「conversion」の定数一覧です。

名前説明
vbUpperCase1大文字に変換します。
vbLowerCase2小文字に変換します。
vbProperCase3全ての単語の1文字目を大文字に変換します。
vbWide4半角文字を全角文字に変換します。
vbNarrow8全角文字を半角文字に変換します。
vbKatakana16"ひらがな" を "カタカナ"に変換します。
vbHiragana32"カタカナ" を "ひらがな"に変換します。
vbUnicode64文字列を Unicode に変換します。
※Macintosh では使用不可
vbFromUnicode128Unicode からシステムの既定のコードに変換します。
※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

関連リンク

ページの先頭へ