こんにちは。
素通りしようかと思ってたけれど、気になることがあったので。
#最初に。
#このサイトでは半角カナは全角で表示されてしまいます。
#以下投稿文中のカナはすべて半角のカナです。読み替えてください。
私が気になったのは、まず、
バ パ
とか、、、
半角カナでは2文字ですから、一文字ずつ置換するのは(文字化けして)難しそう。
それと、
正規表現を使ったサンプルは、Replace()関数の第5引数を1に指定するものなのではないかと、、、。
ア_アイ
とか
ハ_バ
とか、、、
一旦置換したカナを含む一連のカナがうまく置換できなかったりしますね。
私も書いてみました。
難しすぎず簡単すぎずなるべく軽く、という意図で書いた関数です。
やばそうな文字列サンプルを考えて地道な方法を選んだのですけれど、
漏れがないかとか少し不安になる空気ですね。
検証はお任せします。
Sub Re8037230j()
Dim sSrc As String
sSrc = "あああア123イAAAアイウ" ' カナはすべて半角の意味
Debug.Print sSrc
Debug.Print Kana2Wide(sSrc)
sSrc = "ハ マ オ(4)パパa(32)マンマk(29)オジ(37)オジジ(62)" ' カナはすべて半角の意味
Debug.Print sSrc
Debug.Print Kana2Wide(sSrc)
End Sub
' ' Re8037230
' ' 文字列を引数に、半角カナだけを全角に置換
Function Kana2Wide(ByVal sSrc As String) As String
Dim sBuf As String
Dim nLen As Long
Dim nPos As Long
Dim nSt As Long
Dim i As Long
Dim flg As Boolean
nLen = Len(sSrc)
sBuf = Space$(nLen + 1)
nPos = 1
nSt = 1
flg = Asc(sSrc) > 165 And Asc(sSrc) < 224
For i = 1 To nLen + 1
If (Mid$(sSrc, i, 1) Like "[" & Chr$(166) & "-" & Chr$(223) & "]" Xor flg) Or i > nLen Then
If flg Then
Mid(sBuf, nPos) = StrConv(Mid$(sSrc, nSt, i - nSt), vbWide)
Else
Mid(sBuf, nPos) = Mid$(sSrc, nSt, i - nSt)
End If
flg = Not flg
nSt = i
nPos = InStr(nPos + 1&, sBuf, " ")
End If
Next i
Kana2Wide = Left$(sBuf, nPos - 1)
End Function
お礼
ご回答ありがとうございます。