Bài tuy cũ nhưng vẫn có lỗi sai ở code docso của 15000 hay 2000000009000 (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Lequocvan

Thành viên thường trực
Tham gia
21/8/07
Bài viết
365
Được thích
129
Donate (Paypal)
Donate
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Agribank
Nếu vẫn sử dụng code này, mà muốn đọc luôn cả phần thập phân nữa thì nên sửa như thế nào ah?
(ví dụ: 102,22 (một trăm linh hai phẩy hai mươi hai)
 
Em dò lại rồi mà vẫn chưa ra giải pháp, mọi người giúp tôi với ah! chỉnh lại code ra sau bây giờ!
 
Em chỉnh lại như sau, mọi người có thể chỉ giúp em thêm dấu phẩy (,) ngăn cách hàng tỷ, triệu, trăm, nghìn:

Function DocSoRaChu(number As String, Optional DonVi As String = "", Optional Le As String = "", Optional Phay As String = "", Optional Hoa As Boolean = True) As String
'Code cua Vu: Dichchu , rat hay
'Code cua Thay giao (qua co): Pham Duy Long
'Van co sai sot o duoi
'http://www.giaiphapexcel.com/forum/showthread.php?65-Hàm-chuy?n-s?-thành-ch?/page6
Dim arNum, arGrp, dInt As String, dau As String, dvInt As String, s123 As String
Dim s1 As String, s2 As String, s3 As String, sNhom As String
Dim nId As Long, n03 As Long, n1 As Long, n2 As Long, n3 As Long

Dim Sole As Byte, nLop As Byte

arNum = Array(" không", " m" & ChrW(7897) & "t", " hai", " ba", " b" & ChrW(7889) & "n", " n" & ChrW(259) & "m", " sáu", " b" & ChrW(7843) & "y", " tám", " chín", " m" & ChrW(432) & ChrW(7901) & "i", " m" & ChrW(432) & ChrW(417) & "i", " m" & ChrW(7889) & "t", " l" & ChrW(7867), " b" & ChrW(7889) & "n", " l" & ChrW(259) & "m", " ch" & ChrW(7859) & "n", " không", ",", " l" & ChrW(7867))
arGrp = Array(" tr" & ChrW(259) & "m", " tri" & ChrW(7879) & "u", " nghìn", " t" & ChrW(7927), ChrW(226) & "m ", "", "")

On Error GoTo BaoLoi
If Phay <> "" Then arGrp(5) = Trim(Phay)
If DonVi <> "" Then arGrp(6) = " " & Trim(DonVi)
If Le <> "" Then arNum(13) = " " & Trim(Le)

If number < 0 Then
number = Abs(number)
'number = Application.WorksheetFunction.Round(Abs(number), 2)
dau = arGrp(4)

If InStr(1, number, "E") > 0 Then 'so Format 1,23457E+10
number = Replace(Replace(number, ".", ""), ",", "")
dvInt = Mid(number, InStr(1, number, "E") + 1)
number = Mid(number, 1, InStr(1, number, "E") - 1)
number = number & String(dvInt - Len(number) + 1, "0")
End If
End If

dvInt = Int(number)
Sole = (number - dvInt) * 100
n1 = ((Len(str(dvInt)) - 1) Mod 9)
If n1 > 0 Then number = String(9 - (n1 Mod 12), "0") & dvInt
dvInt = String(9 - (((Len(str(dvInt)) - 1) Mod 9) Mod 12), "0") & dvInt

nLop = 1
nId = 1
n03 = 1
For nId = 1 To Len(dvInt) Step 3
s1 = "": s2 ="": s3 ="": sNhom = ""

' If Mid(dvInt, nId, 3) = "000" Then
' If DsNguyen <> "" And nLop = 3 And Len(number) - nId > 2 Then s123 = " t" & ChrW(7927) Else s123 = ""
' 's123 = ""
' If dInt <> "" And nId = 7 Then dInt = dInt & arGrp(3)
' '15000: Muoi nam nghin TY
' 'Neu de dong nay:
' 'thi 2000000009000: ket qua dung
' Else
n1 = Mid(dvInt, nId, 1)
n2 = Mid(dvInt, nId + 1, 1)
n3 = Mid(dvInt, nId + 2, 1)

'If Mid(dvInt, nId, 3) = "000" Then
If n1 & n2 & n3 = "000" Then
If DsNguyen <> "" And n03 = 3 And Len(number) - nId > 2 Then s123 = " t" & ChrW(7927) Else s123 = ""
'If n03 = 3 And Len(number) - nId > 2 Then s123 = ""
's123 = ""
Else
If n1 = 0 And dInt <> "" Then s1 = arNum(0) & arGrp(0)
If n1 > 0 Then s1 = arNum(n1) & arGrp(0)
If n2 = 0 And (s1 = "" Or n3 = 0) Then s2 = ""
If n2 = 0 And s1 <> "" And n3 > 0 Then s2 = arNum(13)
If n2 = 1 Then s2 = arNum(10)
If n2 > 1 Then s2 = arNum(n2) & arNum(11)
If n3 = 1 And n2 <= 1 Then s3 = arNum(1)
If n3 = 1 And n2 > 1 Then s3 = arNum(12)
If n3 = 5 And n2 = 0 Then s3 = arNum(5)
If n3 = 5 And n2 <> 0 Then s3 = arNum(15)
If s3 = "" And n3 > 0 Then s3 = arNum(n3)

s123 = s1 & s2 & s3
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'If n03 = 3 And (dInt <> "" Or s123 <> "") And Len(dvInt) - nId > 9 Then sNhom = arGrp(3)
If n03 = 3 And Len(dvInt) - nId > 9 Then sNhom = arGrp(3)

If sNhom = "" And n03 < 3 Then sNhom = arGrp(n03)

s123 = s123 & sNhom
dInt = dInt & s123 & arGrp(5)

End If

'If n03 = 3 Then n03 = 1 Else n03 = n03 + 1
n03 = n03 + 1
If n03 > 3 Then n03 = 1
DsNguyen = DsNguyen & s123
If nId > Len(number) Then Exit For
Next

If DsNguyen = "" Then DsNguyen = "Kh" & ChrW(244) & "ng" Else DsNguyen = dau & Trim(DsNguyen)


'================
'doc so thap phan
'================
s1 = "": s2 = ""
If Sole = 0 Then
If Songuyen > 0 Then s2 = " ch" & ChrW(7859) & "n"
ElseIf Sole < 10 Then
s2 = " ph" & ChrW(7849) & "y" & " không" & arNum(Sole)
Else
If Left(Sole, 1) = "1" And Right(Sole, 1) = "0" Then
s1 = " ph" & ChrW(7849) & "y" & " m" & ChrW(432) & ChrW(7901) & "i"
ElseIf Left(Sole, 1) = "1" And Right(Sole, 1) <> "0" Then
s1 = " ph" & ChrW(7849) & "y" & " m" & ChrW(432) & ChrW(7901) & "i"
ElseIf Left(Sole, 1) <> "1" And Right(Sole, 1) <> "0" Then
's1 = " ph" & ChrW(7849) & "y" & " m" & ChrW(432) & ChrW(7901) & "i"
s1 = " ph" & ChrW(7849) & "y" & arNum(Left(Sole, 1)) & " m" & ChrW(432) & ChrW(417) & "i"
Else
s1 = " ph" & ChrW(7849) & "y" & arNum(Left(Sole, 1)) & " m" & ChrW(432) & ChrW(417) & "i"
End If

If Right(Sole, 1) = "1" And Left(Sole, 1) <> "1" Then
s2 = " m" & ChrW(7889) & "t"
ElseIf Right(Sole, 1) = "5" Then
s2 = " l" & ChrW(259) & "m"
ElseIf Right(Sole, 1) = "0" And Left(Sole, 1) <> "0" Then
's2 = " xu "
s2 = dvTp
Else
s2 = arNum(Right(Sole, 1))
End If
End If

'===============
'Khai bao don vi: d (VND), u (USD), m
'===============
'"B" & ChrW(7843) & "ng Anh"
'"t" & ChrW(7845) & "n"
'"t" & ChrW(7841)
'"y" & ChrW(7871) & "n"
'"cân"

DonVi = LCase(Trim(DonVi))
If DonVi = "" Or DonVi = "d" Then
dvNguyen = " " & ChrW(273) & ChrW(7891) & "ng"
If Right(Sole, 1) = "0" Then
dvTp = ""
Else
dvTp = " xu"
End If


'ElseIf DonVi = "u" Then
' dvNguyen = " " & ChrW(273) & "ô la M" & ChrW(7929)
' If Right(Sole, 1) = "0" Then
' dvTp = ""
' Else
' dvTp = " cent"
' End If
'ElseIf DonVi = "m" Then
' dvNguyen = " mét"
' If Right(Sole, 1) = "0" Then
' dvTp = ""
' Else
' dvTp = " x" & ChrW(259) & "ng ti mét"
' End If
End If


If dInt = "" Then dInt = arNum(0) Else dInt = dau & dInt
If Right(dInt, 1) = arGrp(5) Then dInt = Left(dInt, Len(dInt) - 1)


If Hoa = True Then
DocSoRaChu = UCase(Left(Trim(DsNguyen), 1)) & Mid(DsNguyen, 2, 99) & dvNguyen & s1 & s2 & dvTp
Else
DocSoRaChu = UCase(Left(Trim(DsNguyen), 1)) & Mid(DsNguyen, 2, 99) & dvNguyen & s1 & s2 & dvTp
End If










Exit Function
BaoLoi:
DocSoRaChu = number & " ?"
End Function
 
Lần chỉnh sửa cuối:
Web KT

Bài viết mới nhất

Back
Top Bottom