Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


19645 / 76732 ←次へ | 前へ→

【62516】Re:エクセルVBAで全角英数字は半角に、半角カタカナは全角カタカナに
回答  arajin  - 09/7/28(火) 10:24 -

引用なし
パスワード
   以下の手順でどうでしょうか?
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

152 hits

【62507】エクセルVBAで全角英数字は半角に、半角カタカナは全角カタカナに あやか 09/7/27(月) 15:22 質問
【62513】Re:エクセルVBAで全角英数字は半角に、... つるりん 09/7/27(月) 20:35 回答
【62516】Re:エクセルVBAで全角英数字は半角に、... arajin 09/7/28(火) 10:24 回答
【62526】Re:エクセルVBAで全角英数字は半角に、... kanabun 09/7/28(火) 21:03 発言

19645 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free