No.2です。遅くなりました。修正コード、、というより別物ですがアップします。
実は、以前に類似した質問に回答したことがあります。(参考URL)
今回はBLUEPIXYのコードも参考にさせてもらい、その時のコードに手を加えました。
関数myStrFmtはワークシートでも使えますし、他のプロシージャーでも使えます。
どうでしょうか?
========== 次行からコード ==================================
'***************************************************************
' カタカナは全角化、英数字および記号を半角化するユーザー定義関数
' 引数:文字列 変換対象となる文字列を指定します
' 引数:数字 数字半角化オプション(省略可) 規定値:True
' 引数:記号 記号半角化オプション(省略可) 規定値:False
'***************************************************************
Function myStrFmt(文字列 As String, Optional 数字 As Boolean = True, Optional 記号 As Boolean = False)
Dim ReplaceList As String
Dim TargetStr As String
Dim MAK As String, NUM As String, ALB As String
Dim i As Long
'半角化の対象とする文字を全角で定義
MAK = "!#$%&'()*+-./:;<=>?@[¥]^_{|}。、,,"
NUM = "01234567890"
ALB = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
'置換リスト作成
ReplaceList = NUM & ALB & StrConv(ALB, vbLowerCase)
If 数字 Then ReplaceList = ReplaceList & NUM
If 記号 Then ReplaceList = ReplaceList & MAK
'全角化
文字列 = StrConv(文字列, vbWide)
'置換
For i = 1 To Len(ReplaceList)
TargetStr = Mid(ReplaceList, i, 1)
文字列 = Replace(文字列, TargetStr, StrConv(TargetStr, vbNarrow))
Next i
myStrFmt = 文字列
End Function
'マクロで関数を使用するサンプル(セルを選択した状態で実行)
Sub サンプル()
On Error Resume Next
Dim rngCell As Range
Application.ScreenUpdating = False
For Each rngCell In Selection
If rngCell.Value <> "" Then
rngCell.Value = myStrFmt(rngCell.Value, True, False)
End If
Next rngCell
Application.ScreenUpdating = True
End Sub
お礼
ありがとうございました! 今度は問題なく全て変換されました。 過去にお答えになったという質問も 読ませていただきました。 過去の質問も一応は チェックしましたが、完全に見落としておりまして、 恥ずかしい限りです。 問題もおかげで解決し、 本当にありがとうございました。