F008 漢数字を半角数字にする関数(十百千等位の漢数字を使用する漢数字)

2019-05-16
EXCEL自作関数

 漢数字を半角数字に変換する関数です。十百千万等位が含まれる漢数字を変換します。
※文字列内の数字は変更できません、漢数字以外の文字があると空白になります。

VBEの標準モジュールに下のコードを登録して「Excelマクロ有効フォーム」で保存してください。
関数の登録方法は⇒♯000 ユーザー定義関数を登録する方法

登録されたら、シート上からユーザー関数「 KanNumA2 」が使用できます。
使い方は 
ワークシート上で = KanNumA2 (漢数字)の関数として使用できます。
【例】
 KanNumA2 (“五十四”)        → 54
 KanNumA2 (“一兆三千億二千五百万三十一”) → 1300025000031

Function KanNumA2(S)
’漢数字を半角数字にする関数(十百千等位の漢数字を使用する漢数字)
On Error GoTo EXITFUN
Dim KanNum1 As Variant
Dim KanNum2 As Variant
Dim KanNum3 As Variant
Dim CS As String
Dim i1 As Long
Dim i2 As Long
Dim i3 As Long
Dim ANum1 As Variant
Dim ANum2 As Variant
Dim K As Variant
Dim KZ As Variant

KanNum1 = Split(“〇,一,二,三,四,五,六,七,八,九”, “,”)
KanNum2 = Split(“十,百,千,万,億,兆,京,垓”, “,”)
KanNum3 = Split(“10,100,1000,10000,100000000,1000000000000 ,10000000000000000,100000000000000000000”, “,”)
CS = S

For i1 = 0 To 9
 CS = Replace(CS, KanNum1(i1), “”)
Next

For i1 = 0 To 7
 CS = Replace(CS, KanNum2(i1), “”)
Next

If Len(CS) > 0 Then
 GoTo EXITFUN
End If

For i3 = 0 To 9
 S = Replace(S, KanNum1(i3), i3)
Next
KZ = S

For i1 = 7 To 0 Step -1
If InStr(S, KanNum2(i1)) > 0 Then
 If KanNum2(i1) = Left(S, InStr(S, KanNum2(i1))) Then
  KZ = 1
 Else
KZ = Left(S, InStr(S, KanNum2(i1))- 1)
End If

S = Mid(S, InStr(S, KanNum2(i1)) + 1, Len(S))
For i2 = 2 To 0 Step -1
 If InStr(KZ, KanNum2(i2)) > 0 Then
 K = Left(KZ, InStr(KZ, KanNum2(i2)))
 KZ = Mid(KZ, Len(K) + 1, Len(KZ))
 ANum1 = ANum1 + Replace(K, KanNum2(i2), “”) * KanNum3(i2)
End If
Next

  If IsNumeric(KZ) = True Then
  ANum1 = ANum1 + KZ
  End If
 ANum2 = ANum2 + ANum1 * KanNum3(i1)
 End If
 ANum1 = 0

Next

If IsNumeric(Left(S, 1)) = True Then
 ANum2 = ANum2 + Left(S, 1)
Else
 GoTo EXITFUN
End If
KanNumA2 = ANum2
Exit Function
EXITFUN:
KanNumA2 = “”
End Function

ここで紹介したコード使用による損害に対しては一切責任は負えません。