大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、全角や半角に変換するには、「StrConv」を使うとできます。全角と半角の変換ができれば、全角と半角を区別しないで比較や検索ができたり、全角と半角の判定や、アルファベットのみを全角や半角に変換することができます。全角と半角を変換する方法について、マスターしていきましょう。

はじめに

この記事では、全角の文字列を半角に変換する方法と、半角の文字列を全角に変換する方法についてご紹介します。

全角と半角を変換したい場合は、StrConvを使います。

StrConvを使えば、すべて半角に統一して文字列を比較したり、検索することができます。

さらに、StrConvを使って、全角と半角の判定をすることができます。

では具体例をあげて解説していきます。

この記事で紹介すること

  • 全角や半角の操作をマスターできます。

目次

VBAコードまとめ

全角と半角の操作について、VBAコードをまとめています。

VBAコードのみ確認したい場合に、ご活用ください。

'全角と半角の変換
Debug.Print StrConv("A", vbWide) '全角へ変換
Debug.Print StrConv("A", vbNarrow) '半角へ変換


Dim A
A = "ABC-123-アイウ"
'アルファベットのみを全角へ変換
For i = 1 To Len(A)
  If Mid(A, i, 1) Like "[A-Z]" Then
    Mid(A, i, 1) = StrConv(Mid(A, i, 1), vbWide)
  End If
Next
Debug.Print A

'数値のみを全角へ変換
For i = 1 To Len(A)
  If Mid(A, i, 1) Like "[0-9]" Then
    Mid(A, i, 1) = StrConv(Mid(A, i, 1), vbWide)
  End If
Next
Debug.Print A

'カタカナのみを全角へ変換
For i = 1 To Len(A)
  If Mid(A, i, 1) Like "[ア-ン]" Then
    Mid(A, i, 1) = StrConv(Mid(A, i, 1), vbWide)
  End If
Next
Debug.Print A


Dim A
A = "ABC-123-アイウ"
'アルファベットのみを半角へ変換
For i = 1 To Len(A)
  If Mid(A, i, 1) Like "[A-Z]" Then
    Mid(A, i, 1) = StrConv(Mid(A, i, 1), vbNarrow)
  End If
Next
Debug.Print A

'数値のみを半角へ変換
For i = 1 To Len(A)
  If Mid(A, i, 1) Like "[0-9]" Then
    Mid(A, i, 1) = StrConv(Mid(A, i, 1), vbNarrow)
  End If
Next
Debug.Print A

'カタカナのみを半角へ変換
For i = 1 To Len(A)
  If Mid(A, i, 1) Like "[ア-ン]" Then
    Mid(A, i, 1) = StrConv(Mid(A, i, 1), vbNarrow)
  End If
Next
Debug.Print A


'全角と半角を区別しないで比較する
Debug.Print StrConv("ABC", vbWide) = StrConv("ABC", vbWide)


'全角と半角を区別しないで検索する
Debug.Print InStr(StrConv("ABC", vbWide), StrConv("A", vbWide)) > 0


'全角と半角の判定
Debug.Print Len("A") * 2 = LenB(StrConv("A", vbFromUnicode)) '全角の判定
Debug.Print Len("A") = LenB(StrConv("A", vbFromUnicode)) '半角の判定
'全角と半角が混在しているかの判定
B = Len("ABC")
C = LenB(StrConv("ABC", vbFromUnicode))
Debug.Print B <> C And B * 2 <> C

では、解説していきます。

全角や半角に変換する

全角や半角に変換するには、「StrConv」を使います。

全角への変換(vbWide)

全角へ変換するには、StrConvの引数に、「vbWide」を入力します。

全角へ変換する

全角へ変換してみます。

Sub TEST1()
  
  '全角へ変換
  Debug.Print StrConv("A", vbWide)
  
End Sub

実行してみます。

全角に変換できました

全角に変換できました。

すべて全角に変換される

StrConvでは、文字列すべてが変換されます。

Sub TEST2()
  
  '全角へ変換
  Debug.Print StrConv("ABC-123-アイウ", vbWide)
  
End Sub

実行してみます。

すべて全角に変換できました

すべての文字列を、全角に変換できました。

半角への変換(vbNarrow)

半角への変換は、StrConvに、「vbNarrow」を入力します。

半角へ変換する

半角へ変換してみます。

Sub TEST3()
  
  '半角へ変換
  Debug.Print StrConv("A", vbNarrow)
  
End Sub

実行してみます。

半角に変換できました

半角に変換できました。

すべて半角に変換される

先ほどと同じように、文字列すべてが半角に変換されます。

Sub TEST4()
  
  '半角へ変換
  Debug.Print StrConv("ABC-123-アイウ", vbNarrow)
  
End Sub

実行してみます。

すべて半角に変換できました

すべての文字列が、半角に変換されました。

文字種を指定して全角や半角に変換する

次は、文字種を指定して、アルファベットのみや、数値のみ、カタカナのみを、全角や半角に変換してみます。

アルファベットや数値、カタカナを指定して全角に変換

まずは、アルファベットのみを全角に変換してみます。

アルファベットのみを全角に変換

「Like」を使って、「"[A-Z]"」で、半角のアルファベットを探して、全角に変換します。

Sub TEST5()
  
  Dim A
  A = "ABC-123-アイウ"
  
  'アルファベットのみを全角へ変換
  For i = 1 To Len(A)
    If Mid(A, i, 1) Like "[A-Z]" Then
      Mid(A, i, 1) = StrConv(Mid(A, i, 1), vbWide)
    End If
  Next
  
  Debug.Print A
  
End Sub

実行してみます。

アルファベットのみを全角に変換できました

アルファベットのみを全角に変換できました。

数値のみを全角に変換

数値のみを全角に変換する場合は、Likeを使って「"[0-9]"」で、半角の数値を探して、全角に変換します。

Sub TEST6()
  
  Dim A
  A = "ABC-123-アイウ"
  
  '数値のみを全角へ変換
  For i = 1 To Len(A)
    If Mid(A, i, 1) Like "[0-9]" Then
      Mid(A, i, 1) = StrConv(Mid(A, i, 1), vbWide)
    End If
  Next
  
  Debug.Print A
  
End Sub

実行してみます。

数値のみを全角に変換できました

数値のみを全角に変換できました。

カタカナのみを全角に変換

半角カタカナを全角に変換する場合は、「"[ア-ン]"」で半角カタカナを探して、全角に変換します。

Sub TEST7()
  
  Dim A
  A = "ABC-123-アイウ"
  
  'カタカナのみを全角へ変換
  For i = 1 To Len(A)
    If Mid(A, i, 1) Like "[ア-ン]" Then
      Mid(A, i, 1) = StrConv(Mid(A, i, 1), vbWide)
    End If
  Next
  
  Debug.Print A
  
End Sub

実行してみます。

カタカナのみを全角に変換できました

カタカナのみを全角に変換できました。

アルファベットや数値、カタカナを指定して半角に変換

先ほどとは反対に、アルファベットや数値、カタカナを指定して半角に変換してみます。

アルファベットのみを半角に変換

アルファベットのみを半角に変換する場合は、Likeを使って「"[A-Z]"」で全角アルファベットを探して、半角に変換します。

Sub TEST8()
  
  Dim A
  A = "ABC-123-アイウ"
  
  'アルファベットのみを半角へ変換
  For i = 1 To Len(A)
    If Mid(A, i, 1) Like "[A-Z]" Then
      Mid(A, i, 1) = StrConv(Mid(A, i, 1), vbNarrow)
    End If
  Next
  
  Debug.Print A
  
End Sub

実行してみます。

アルファベットのみを半角に変換できました

アルファベットのみを半角に変換できました。

数値のみを半角に変換

数値のみを半角に変換したい場合は、「"0-9"」で全角の数値を探して、半角の数値に変換します。

Sub TEST9()
  
  Dim A
  A = "ABC-123-アイウ"
  
  '数値のみを半角へ変換
  For i = 1 To Len(A)
    If Mid(A, i, 1) Like "[0-9]" Then
      Mid(A, i, 1) = StrConv(Mid(A, i, 1), vbNarrow)
    End If
  Next
  
  Debug.Print A
  
End Sub

実行してみます。

数値のみを半角に変換できました

数値のみを半角に変換できました。

カタカナのみを半角に変換

全角カタカナを半角に変換したい場合は、「"[ア-ン]"」で全角カタカナを探して、半角に変換します。

Sub TEST10()
  
  Dim A
  A = "ABC-123-アイウ"
  
  'カタカナのみを半角へ変換
  For i = 1 To Len(A)
    If Mid(A, i, 1) Like "[ア-ン]" Then
      Mid(A, i, 1) = StrConv(Mid(A, i, 1), vbNarrow)
    End If
  Next
  
  Debug.Print A
  
End Sub

実行してみます。

カタカナのみを半角に変換できました

カタカナのみを半角に変換できました。

全角や半角を区別しないで比較する

全角や半角を区別しないで比較してみます。

全角に統一して比較する

やり方は、「全角」に統一してから、比較するという感じです。

Sub TEST11()
  
  Dim A, B
  A = StrConv("ABC", vbWide) '全角へ変換
  B = StrConv("ABC", vbWide) '全角へ変換
  
  '比較する
  Debug.Print A = B
  
End Sub

実行してみます。

全角と半角を区別しないで比較できた

全角と半角を区別しないで比較できました

全角と半角を区別しないで比較できました。

全角や半角を区別しないで検索する

次は、全角や半角を区別しないで検索してみます。

やり方は、先ほどの比較と同じで、検索元と検索値を「全角」に統一して検索する、という感じです。

全角に統一して検索する

全角に統一して検索してみます。

Sub TEST12()
  
  Dim A, B
  A = StrConv("ABC", vbWide) '全角へ変換
  B = StrConv("A", vbWide) '全角へ変換
  
  '検索する
  Debug.Print InStr(A, B) > 0
  
End Sub

実行してみます。

全角と半角を区別しないで検索できた

全角と半角を区別しないで検索できました

全角と半角を区別しないで、検索できました。

全角や半角を判定する

次は、全角や半角の判定について、やってみます。

やり方としては、「全角は2文字」で、「半角は1文字」としてカウントする方法を使って、全角か半角、もしくは全角と半角が混在しているかを判定します。

全角の判定をする

全角の判定をしてみます。

「Lenで取得した文字数を2倍した数」と、「vbFromUnicodeに変換してLenBで取得した文字数」が一致するかを比較します。

一致した場合は、「全角のみ」と判定できます。

Sub TEST13()
  
  Dim A
  A = "A"
  
  '全角の判定
  Debug.Print Len(A) * 2 = LenB(StrConv(A, vbFromUnicode))
  
End Sub

Lenは全角でも半角でも「1文字」となります。

vbFromUnicodeに変換してLenBで文字数を取得すると、全角が「2文字」で半角が「1文字」となります。

すべて全角だと、Lenで取得した文字数の2倍と同じ文字数になります。

では、実行してみます。

全角の判定ができた

全角の判定ができました

全角であると判定ができました。

半角の判定をする

次は、「半角」の判定をしてみます。

「Lenで取得した文字数」と、「vbFromUnicodeに変換してLenBで取得した文字数」が一致するかを比較します。

一致した場合は、「半角のみ」と判定できます。

Sub TEST14()
  
  Dim A
  A = "A"
  
  '半角の判定
  Debug.Print Len(A) = LenB(StrConv(A, vbFromUnicode))
  
End Sub

Lenは全角でも半角でも「1文字」となります。

vbFromUnicodeに変換してLenBで文字数を取得すると、全角が「2文字」で半角が「1文字」となります。

すべて半角だとLenで取得した文字数と同じになります。

では、実行してみます。

半角の判定ができた

半角の判定ができました

半角の判定ができました。

全角と半角が混在しているかの判定

全角と半角が混在しているかの判定してみます。

「vbFromUnicodeに変換してLenBで取得した文字数」が、「Lenで取得した文字数」と一致しないで、かつ、「Lenで取得した文字数の2倍」と一致しない場合は、半角と全角が混在している、ということになります。

Sub TEST15()
  
  Dim A, B, C
  A = "ABC"
  B = Len(A)
  C = LenB(StrConv(A, vbFromUnicode))
  
  '全角と半角が混在しているかの判定
  Debug.Print B <> C And B * 2 <> C
  
End Sub

では、実行してみます。

全角と半角が混在しているかの判定ができた

全角と半角が混在しているかの判定ができました

全角と半角が混在しているかの判定ができました。

おわりに

この記事では、全角の文字列を半角に変換する方法と、半角の文字列を全角に変換する方法についてご紹介しました。

全角と半角を変換したい場合は、StrConvを使います。

StrConvを使えば、すべて半角に統一して文字列を比較したり、検索することができます。

さらに、StrConvを使って、全角と半角の判定をすることができます。

全角と半角の操作について、マスターしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す