|
訂正して下さい
>>はじめまして。ExcelVBAの質問させてください。
>>質問1
>>ASC関数を使い全角2バイトを半角1バイトに変換したあと半角変換できない文字は「-」に置き換える。
>>11大阪府11→11-11
>>質問2
>>半角変換できない文字の後に文字が続かない場合は省略する。
>>11大阪府→11
>>質問3
>>「-」に置き換えた結果「-」が連続する場合は「-」をひとつ省略する。
>>11大阪府-11→11-11
>>
>>実際には何万というレコードが有り一番上から順番に処理していくような方法にしたいと思っています。
>>よろしくお願い致します。
>
>非常にわかりやすいご質問の記述ですね!!
>
>'============================================================
>Dim regEx As Object
>Sub test()
> Set regEx = CreateObject("VBScript.RegExp")
> 変換文字列 = "11大阪府-11"
> MsgBox get_replace(StrConv(変換文字列, vbNarrow), "-")
> 変換文字列 = "123---大阪府-11-123---"
> MsgBox get_replace(StrConv(変換文字列, vbNarrow), "-")
> Set regEx = Nothing
>End Sub
>'=====================================================================
>Function get_replace(mystr, cnvstr, Optional ByVal short As Boolean = True) As String
>'全角文字を指定文字に変換する
>'input mystr----変換対象文字列
>' cnvstr---検索文字
>' short----省略可---True---短縮処理と末尾処理を行う
>'output get_replace---変換された文字列
> Dim chkidx As Long
> Dim get_replacewk As String
> chkidx = 1
> get_replacewk = ""
> Do While chkidx <= Len(mystr)
> If LenB(StrConv(Mid(mystr, chkidx, 1), vbFromUnicode)) = 2 Then
> get_replacewk = get_replacewk & cnvstr
> Else
> get_replacewk = get_replacewk & Mid(mystr, chkidx, 1)
> End If
> chkidx = chkidx + 1
> Loop
> If short = True Then
' Set regEx = CreateObject("VBScript.RegExp") ←削除してください
> regEx.Pattern = "\" & cnvstr & "{2,}"
> regEx.IgnoreCase = True
> Do
> get_replacewk = regEx.Replace(get_replacewk, cnvstr)
> Loop While regEx.test(get_replacewk)
> regEx.Pattern = "\" & cnvstr & "{1,}$"
> Do
> get_replacewk = regEx.Replace(get_replacewk, "")
> Loop While regEx.test(get_replacewk)
> get_replace = get_replacewk
> Else
> get_replace = get_replacewk
> End If
>End Function
>
>プロシジャーtestは一例ですから、このプロシジャーに一万行の
>ループ処理と言う事になりますが・・・。
>
>確認してみて下さい。
|
|