RMB
RMB
Press Alt+F11 to open VB editor, paste below code, then save to .xlsm file, then you will have RMB function
Function RMB(num As Double) As String
Dim digits As String
' 0-9 Chinese uppercase digits
digits = ChrW(38646) & ChrW(22777) & ChrW(36144) & ChrW(21441) & _
ChrW(32902) & ChrW(20237) & ChrW(38470) & ChrW(26578) & _
ChrW(25420) & ChrW(29590)
Dim u1 As String: u1 = ""
Dim u2 As String: u2 = ChrW(25342) ' shi (10)
Dim u3 As String: u3 = ChrW(20336) ' bai (100)
Dim u4 As String: u4 = ChrW(20191) ' qian (1000)
Dim wan As String: wan = ChrW(19975) ' wan (10,000)
Dim yi As String: yi = ChrW(20159) ' yi (100,000,000)
Dim yuan As String: yuan = ChrW(20803) ' yuan
Dim jiaoC As String: jiaoC = ChrW(35282) ' jiao (0.1)
Dim fenC As String: fenC = ChrW(20998) ' fen (0.01)
Dim zheng As String: zheng = ChrW(25972) ' zheng (exact)
Dim ling As String: ling = ChrW(38646) ' zero
Dim fu As String: fu = ChrW(36127) ' negative
' Group unit suffixes: (none), wan, yi, wan-yi
Dim groupU(3) As String
groupU(0) = ""
groupU(1) = wan
groupU(2) = yi
groupU(3) = wan & yi
Dim units(3) As String
units(0) = u1: units(1) = u2: units(2) = u3: units(3) = u4
' Convert to fen (0.01) as Currency to avoid floating point errors
Dim n As Currency
n = CCur(Abs(num) * 100 + 0.5)
' Extract fen and jiao digits using Currency arithmetic to avoid Long overflow
Dim fenV As Integer: fenV = CInt(n - Int(n / 10) * 10)
Dim jiaoV As Integer: jiaoV = CInt(Int(n / 10) - Int(n / 100) * 10)
Dim intPart As Currency: intPart = Int(n / 100)
Dim intStr As String: intStr = ""
Dim temp As Currency: temp = intPart
Dim gi As Integer: gi = 0
' Process integer part in groups of 4 digits
Do While temp > 0
' Use Currency modulo to avoid CLng overflow (Long max ~2.1 billion)
Dim gLng As Long: gLng = CLng(temp - Int(temp / 10000) * 10000)
Dim gStr As String: gStr = ""
Dim i As Integer
For i = 3 To 0 Step -1
Dim d As Integer: d = (gLng \ (10 ^ i)) Mod 10
If d <> 0 Then
gStr = gStr & Mid(digits, d + 1, 1) & units(i)
ElseIf Len(gStr) > 0 And Right(gStr, 1) <> ling Then
gStr = gStr & ling
End If
Next i
If Right(gStr, 1) = ling Then gStr = Left(gStr, Len(gStr) - 1)
If Len(gStr) > 0 Then
' Insert zero when group is less than 1000 (missing leading digit)
If Len(intStr) > 0 And gLng < 1000 Then
intStr = gStr & groupU(gi) & ling & intStr
Else
intStr = gStr & groupU(gi) & intStr
End If
ElseIf Len(intStr) > 0 And Right(intStr, 1) <> ling Then
intStr = ling & intStr
End If
temp = Int(temp / 10000)
gi = gi + 1
Loop
If Len(intStr) > 0 Then
If Right(intStr, 1) = ling Then intStr = Left(intStr, Len(intStr) - 1)
intStr = intStr & yuan
End If
' Build decimal part
Dim decStr As String
If jiaoV = 0 And fenV = 0 Then
decStr = zheng
ElseIf jiaoV = 0 Then
decStr = ling & Mid(digits, fenV + 1, 1) & fenC
ElseIf fenV = 0 Then
decStr = Mid(digits, jiaoV + 1, 1) & jiaoC & zheng
Else
decStr = Mid(digits, jiaoV + 1, 1) & jiaoC & Mid(digits, fenV + 1, 1) & fenC
End If
If num < 0 Then intStr = fu & intStr
If Len(intStr) = 0 Then intStr = ling & yuan
RMB = intStr & decStr
End Function