Public Function f_全角2桁以上数値to半角数値(ByVal strArg As String) As String
Const REG_FORMAT As String = "[0-9]{2,}"
Dim lngList() As Long
Dim objRegExp As Object
Dim objRegMc As Object
Dim objRegMt As Object
Dim i As Long
Dim j As Long
Dim lngTmp As Long
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Global = True
objRegExp.Pattern = REG_FORMAT
Set objRegMc = objRegExp.Execute(strArg)
If objRegMc.Count = 0 Then
f_全角2桁以上数値to半角数値 = strArg
Exit Function
End If
ReDim Preserve lngList(objRegMc.Count - 1)
For Each objRegMt In objRegMc
lngList(i) = StrConv(objRegMt.Value, vbNarrow)
i = i + 1
Next
Set objRegMt = Nothing
Set objRegMc = Nothing
Set objRegExp = Nothing
For i = LBound(lngList) To UBound(lngList) - 1
For j = LBound(lngList) To LBound(lngList) + UBound(lngList) - i - 1
If lngList(j + 1) > lngList(j) Then
lngTmp = lngList(j)
lngList(j) = lngList(j + 1)
lngList(j + 1) = lngTmp
End If
Next j
Next i
For i = 0 To UBound(lngList) Step 1
strArg = Replace$(strArg, StrConv(lngList(i), vbWide), lngList(i))
Next i
Function 全角2桁以上数値半角変換(str As String) As String
For i = 1 To Len(str)
If IsNumeric(Mid(str, i, 2)) Then
For j = 2 To Len(str) - i + 1
If IsNumeric(Mid(str, i, j)) = False Or StrConv(Mid(str, i + j - 1, 1), 8) = " " Then Exit For
Next j
j = j - 1
Nstr = Nstr & StrConv(Mid(str, i, j), 8)
i = i + (j - 1)
Else
Nstr = Nstr & Mid(str, i, 1)
End If
Next i
全角2桁以上数値半角変換 = Nstr
End Function
Public Function f_全角2桁以上数値to半角数値(ByVal strArg As String) As String
Dim I As Integer
Dim oRe As Object
Dim oMatches As Object
Set oRe = CreateObject("VBScript.RegExp")
oRe.Global = True
oRe.Pattern = "([0-9]{2,})"
Set oMatches = oRe.Execute(strArg)
For I = 0 To oMatches.Count - 1
strArg = Replace(strArg, oMatches(I), StrConv(oMatches(I), vbNarrow))
Next I
f_全角2桁以上数値to半角数値 = strArg
Set oRe = Nothing
Set oMatches = Nothing
End Function
Function 全角2桁以上数値半角変換(str As String) As String
For i = 1 To Len(str)
If Len(Mid(str, i, 2)) = 2 And IsNumeric(Mid(str, i, 2)) And InStr(StrConv(Mid(str, i, 2), 8), ".") = 0 Then
For j = 2 To Len(str) - i + 1
If IsNumeric(Mid(str, i, j)) = False Or StrConv(Mid(str, i + j - 1, 1), 8) = " " Or InStr(StrConv(Mid(str, i, j), 8), ".") <> 0 Then Exit For
Next j
j = j - 1
Nstr = Nstr & StrConv(Mid(str, i, j), 8)
i = i + (j - 1)
Else
Nstr = Nstr & Mid(str, i, 1)
End If
Next i
全角2桁以上数値半角変換 = Nstr
End Function
Sub 二桁以上全角数字→半角変換2()
For i = 10 To 99
Cells.Replace What:=StrConv(i, 4), Replacement:=i
Next i
For i = 0 To 9
For j = 0 To 9
Cells.Replace What:=StrConv(i, 4) & j, Replacement:=i & j
Cells.Replace What:=j & StrConv(i, 4), Replacement:=j & i
Next j
Next i
End Sub