|
以下の手順でどうでしょうか?
1.変換対象の文字全体をまず、全角大文字に変換する。
(文面からは大文字にしたいとは書かれていないようですが、例示がそのようなので)
2.1で変換後の文字列を頭から1文字づつ確認し、英字もしくは数字の場合は、
その文字のみ逆に半角変換する。(Midステートメントの利用)
Function hoge(ByVal s As Variant) As Variant
Dim i As Long, j As Long
Dim dmy As String
If TypeOf s Is Range Then s = s.Value
If IsArray(s) Then
For i = LBound(s, 1) To UBound(s, 1)
For j = LBound(s, 2) To UBound(s, 2)
s(i, j) = hoge(s(i, j))
Next
Next
Else
' s = StrConv(s, vbWide)
s = StrConv(s, vbWide Or vbUpperCase)
For i = 1 To Len(s)
dmy = StrConv(Mid$(s, i, 1), vbNarrow)
Select Case Asc(dmy)
' Case 33 To 122
Case 48 To 57, 65 To 90, 97 To 122 '文字コードで判断(数字と英文字のみ)
Mid(s, i, 1) = dmy
End Select
Next
End If
hoge = s
End Function
(注意)
ユーザー関数で用意してみた。
英字か数字かの確認は、半角変換後の文字コードで判断した。
気になったのは、例えば、「aBcD12.35」→「ABCD12.35」と"."は全角のままですが、
それでいいのでしょうか?
もし、記号の一部も半角対象なら、判断する文字コードをカスタマイズして下さい。
以下の使用例は、選択範囲の右の範囲に結果を出すものです。
Sub Sample()
Dim r As Range
For Each r In Selection.Areas
r.Offset(, r.Columns.Count).Value = hoge(r)
Next
End Sub
|
|