[[20131001001805]] 『全角を半角に変換する』(aki) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『全角を半角に変換する』(aki)

こんばんわ・宜しくお願いします。

 全角を半角に変換したいと考えております。
半角にしたいのは、英数字+「」+()+− で、
ネットサーフさせて頂き

 Sub zen2han()
  Dim c As Range
  Dim i As Integer
  Dim ansData As Variant
    For Each c In Selection
      ansData = ""
      For i = 1 To Len(c.Value)
        If Mid(c.Value, i, 1) Like "[A-z]" Or Mid(c.Value, i, 1) Like "[0-9]" Or Mid(c.Value, i, 1) Like "−" Then
          ansData = ansData & StrConv(Mid(c.Value, i, 1), vbNarrow)
        Else
          ansData = ansData & Mid(c.Value, i, 1)
        End If
      Next i
      c.Offset(0, 1).Value = ansData
    Next c
End Sub

 を参考に

 Sub 全角を半角に()
    Dim c As Range
    Dim i As Integer
    Dim ansData As Variant
        For Each c In Selection
            ansData = ""
            For i = 1 To Len(c.Value)
        If Mid(c.Value, i, 1) Like "[A-z]" Or Mid(c.Value, i, 1) Like "[0-9]" Or Mid(c.Value, i, 1) Like "「" Or Mid(c.Value, i, 1) Like "」" Or Mid(c.Value, i, 1) Like "(" Or Mid(c.Value, i, 1) Like ")" Or Mid(c.Value, i, 1) Like "−" Then
                    ansData = ansData & StrConv(Mid(c.Value, i, 1), vbNarrow)
                Else
                    ansData = ansData & Mid(c.Value, i, 1)
                End If
            Next i
            c.Offset(0, 0).Value = ansData
        Next c
End Sub

 としました。
これをも少し見やすくするため、以下のようにしたのですが
自分の力では出来ませんでした。

 Sub 英数字のみ全角を半角に()
    Dim c As Range
    Dim i As Integer
    Dim ansData As Variant
        For Each c In Selection
            ansData = ""
            For i = 1 To Len(c.Value)
		If Mid(c.Value, i, 1) Like "[A-z]" Or & vbCrLf & _
		   Mid(c.Value, i, 1) Like "[0-9]" Or & vbCrLf & _
		   Mid(c.Value, i, 1) Like "「" Or & vbCrLf & _
		   Mid(c.Value, i, 1) Like "」" Or & vbCrLf & _
		   Mid(c.Value, i, 1) Like "(" Or & vbCrLf & _
		   Mid(c.Value, i, 1) Like ")" Or & vbCrLf & _
		   Mid(c.Value, i, 1) Like "−" Then
                    ansData = ansData & StrConv(Mid(c.Value, i, 1), vbNarrow)
                Else
                    ansData = ansData & Mid(c.Value, i, 1)
                End If
            Next i
            c.Offset(0, 0).Value = ansData
        Next c
End Sub

 もう少し見やすくなるのでしょうか?
宜しくお願いします。
環境は、XP 2003 です。
                           2013/10/01 0:28 aki

 Like演算子でのパターンは、一つにまとめることができます。

 Sub 英数字のみ全角を半角に()
    Dim c As Range
    Dim i As Integer
    Dim Pattern As String
    Dim ansData As Variant
    Pattern = "[−A-z0-9()「」]"
    For Each c In Selection
            ansData = ""
            For i = 1 To Len(c.Value)
               If Mid(c.Value, i, 1) Like Pattern Then
                    ansData = ansData & StrConv(Mid(c.Value, i, 1), vbNarrow)
                Else
                    ansData = ansData & Mid(c.Value, i, 1)
                End If
            Next i
            c.Value = ansData
        Next c
 End Sub

 正規表現を使うともっと色んなパターンで文字列検索ができます。

 VBScript.RegExp で検索すればいくつも参考サイトがみつかります。

 ichinose


逆に、半角にしたくない文字は幾つありますか?
1文字ずつ判定してから変換するより、1セルまとめて1回で半角に変えてしまい、
その後に変換したくない文字をReplace関数で元に戻す方法もあります。
(???)

ichinoseさま

 有難う御座いました!
完璧に変換できました。
感謝の気持ちで一杯です。
また、参考サイトの提供も有難う御座います。
もっと勉強させて頂きます。

                           2013/10/01 23:52 aki

???さま

 有難う御座いました。
更問有難う御座います。

 >半角にしたくない文字は幾つありますか?
カタカナ以外は全て半角にしたいです。
よって半角にしたくない文字は、アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンの46文字です。

 >1文字ずつ判定してから変換するより、1セルまとめて1回で半角に変えてしまい、
その後に変換したくない文字をReplace関数で元に戻す方法もあります。

 なるほどって言いたいところですが
すいません。自分には全く浮かびません!___orz___

                           2013/10/01 23:57 aki

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.