VBA 半角カタカナの全角変換
前回「VBA 文字列の全角変換」では、テスト用の文字列全体を対象に全角変換する処理を作成しました。
今回は、文字列の中から、半角カタカナだけを対象に全角変換する処理に変えていきます。
半角カタカナの判定
半角カタカナは、文字コード一覧を見ると分かりますが、連続したコードで1つのブロック内に割り付けられています。
(参考ページ:「Halfwidth Katakana」)
そのため、判定対象の文字を文字コードに変換したうえで、半角カタカナのブロック範囲内にあるかどうかを調べれば、半角カタカナかどうか判定できそうです。
プログラム作成
前回ファイル「test.xlsm」のプログラムを変更します。
新たに「test2」と「KatakanaZenkaku」関数を追加しました。
Option Explicit
Public Sub test1()
Dim sText As String
sText = Range("B2").Value
Range("B4").Value = StrConv(sText, vbWide)
End Sub
Public Sub test2()
Dim sText As String
sText = Range("B2").Value
Range("B4").Value = KatakanaZenkaku(sText)
End Sub
Private Function KatakanaZenkaku(sInput As String) As String
Dim sOutput As String: sOutput = ""
Dim sPhrase As String: sPhrase = ""
Dim i As Long
For i = 1 To Len(sInput)
Dim sChar As String: sChar = Mid(sInput, i, 1)
If (AscW("・") <= AscW(sChar)) And (AscW(sChar) <= AscW("゚")) Then
sPhrase = sPhrase & sChar
Else
If sPhrase <> "" Then
sOutput = sOutput & StrConv(sPhrase, vbWide)
sPhrase = ""
End If
sOutput = sOutput & sChar
End If
Next i
If sPhrase <> "" Then
sOutput = sOutput & StrConv(sPhrase, vbWide)
End If
KatakanaZenkaku = sOutput
End Function
動作確認
Sheet1シートのB2セルに適当な半角カタカナを含んだ文字列を設定したうえで、マクロ名:Sheet1.test2を実行します。
実行結果例は次のようになり、B2セルの文字列の中から、半角カタカナのみが全角文字に変換されてB4セルに設定されました。
プログラムの解説
それでは、プログラムの主な内容を説明します。
test2は、前回プログラムのtest1を流用改造して、StrConv関数の代わりに、後述するKatakanaZenkaku関数を呼び出すように変えてあります。
Public Sub test2()
Dim sText As String
sText = Range("B2").Value
Range("B4").Value = KatakanaZenkaku(sText)
End Sub
KatakanaZenkakuは、sInputで与えられた文字列の中で、半角カタカナのみを全角変換した文字列を作成して返す関数です。
Private Function KatakanaZenkaku(sInput As String) As String
:
End Function
sOutputは、変換後の文字列を格納する変数、sPhraseは、半角カタカナを全角変換するために一時保存する変数で、それぞれ変数宣言したうえで、空文字で初期化します。
Dim sOutput As String: sOutput = ""
Dim sPhrase As String: sPhrase = ""
sInput文字列から1文字ずつ取り出して処理するForループです。取り出した文字はsCharに格納します。
Dim i As Long
For i = 1 To Len(sInput)
Dim sChar As String: sChar = Mid(sInput, i, 1)
:
Next i
sCharの文字が半角カタカナなら、sPhrase変数に連結して格納します。半角カタカナかどうかの判定は、対象文字をAscW関数でUnicode変換したうえで、中黒(・)以上、半濁点(゚)以下の範囲内かどうかで判定します。
If (AscW("・") <= AscW(sChar)) And (AscW(sChar) <= AscW("゚")) Then
sPhrase = sPhrase & sChar
sCharの文字が半角カタカナでないときは、Elseに分岐してきます。
このとき、sPhraseに文字列があれば、StrConv関数を利用して全角変換したうえで、sOutput変数に連結します。また、sPhraseは空文字でリセットしておきます。
そして、半角カタカナでないsCharの文字をsOutput変数に連結します。
Else
If sPhrase <> "" Then
sOutput = sOutput & StrConv(sPhrase, vbWide)
sPhrase = ""
End If
sOutput = sOutput & sChar
End If
Forループの下にある処理は、sInput文字列の末尾が半角カタカナのときにsPhraseに文字列がセットされたまま、Forループを抜けてくるため、その文字列を全角変換してsOutput変数に連結します。
そして、sOutputをKatakanaZenkakuに設定して関数の返り値とします。
If sPhrase <> "" Then
sOutput = sOutput & StrConv(sPhrase, vbWide)
End If
KatakanaZenkaku = sOutput
最後に
文字列の中から、半角カタカナだけを対象に全角変換する処理を作成しました。
次回は、PowerPoint文書のテキストを対象に変換する処理を作成していきます。