[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『全角を半角に変換する』(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
有難う御座いました! 完璧に変換できました。 感謝の気持ちで一杯です。 また、参考サイトの提供も有難う御座います。 もっと勉強させて頂きます。
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.