|
▼hiroshi さん:
こんばんは。
>はじめまして。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は一例ですから、このプロシジャーに一万行の
ループ処理と言う事になりますが・・・。
確認してみて下さい。
|
|