Hỏi về đọc số thành chữ bổ sung thêm dấu phẩy (1 người xem)

Liên hệ QC

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

rickypham

Thành viên hoạt động
Tham gia
6/11/09
Bài viết
150
Được thích
3
Em có hàm như sau, lấy từ GPE
Mã:
Public Newstr As String
Public dvt As String
Public chu As String
Public bangchu(0 To 9, 0 To 2) As String
Public banghang(0 To 5) As String
Public bangvaloi(1 To 9, 1 To 2) As String
Public i As Integer
Public sole As Single
Public l As Integer
Public so As Integer
Public so1 As Integer
Public so2 As Integer
Public so3 As Integer
Public so4 As Integer
Public nhom As Integer
Public du As Integer
'Dim bangchu()
'Dim banghang()
'Dim bangvaloi()








Function SayVNI(ByVal Number, Optional Unit = 0, Optional Dec = 0) As String
bangchu(0, 0) = "Khoâng traêm "
bangchu(1, 0) = "Moät traêm "
bangchu(2, 0) = "Hai traêm "
bangchu(3, 0) = "Ba traêm "
bangchu(4, 0) = "Boán traêm "
bangchu(5, 0) = "Naêm traêm "
bangchu(6, 0) = "Saùu traêm "
bangchu(7, 0) = "Baûy traêm "
bangchu(8, 0) = "Taùm traêm "
bangchu(9, 0) = "Chín traêm "
bangchu(0, 1) = ""
bangchu(1, 1) = "Moät "
bangchu(2, 1) = "Hai "
bangchu(3, 1) = "Ba "
bangchu(4, 1) = "Boán "
bangchu(5, 1) = "Naêm "
bangchu(6, 1) = "Saùu "
bangchu(7, 1) = "Baûy "
bangchu(8, 1) = "Taùm "
bangchu(9, 1) = "Chín "
bangchu(0, 2) = "leû "
bangchu(1, 2) = "Möôøi "
bangchu(2, 2) = "Hai möôi "
bangchu(3, 2) = "Ba möôi "
bangchu(4, 2) = "Boán möôi "
bangchu(5, 2) = "Naêm möôi "
bangchu(6, 2) = "Saùu möôi "
bangchu(7, 2) = "Baûy möôi "
bangchu(8, 2) = "Taùm möôi "
bangchu(9, 2) = "Chín möôi "
banghang(0) = ""
banghang(1) = ""
banghang(2) = "nghìn "
banghang(3) = IIf(Abs(Number) > 10 ^ 6 And Val(Right(Number, 6)) = 0, "trieäu ", "trieäu, ")
banghang(4) = "tyû "
banghang(5) = IIf(Abs(Number) > 10 ^ 12 And Val(Right(Number, 12)) = 0, "nghìn tyû ", "nghìn tyû, ")


bangvaloi(1, 1) = "möôi moät"
bangvaloi(2, 1) = "i naêm"
bangvaloi(1, 2) = "möôi moát"
bangvaloi(2, 2) = "i laêm"
tam = Abs(Val(Number))
tam = Int(tam)
l = Len(tam)


For i = 1 To l
so = Mid(tam, i, 1)
so1 = IIf(i > l - 1, 0, Mid(tam, i + 1, 1))
so2 = IIf(i > l - 2, 0, Mid(tam, i + 2, 1))
If i < 2 Then
so3 = 0
Else
so3 = Mid(tam, i - 1, 1)
End If
If i < 3 Then
so4 = 0
Else
so4 = Mid(tam, i - 2, 1)
End If
nhom = Int(l - i + 1) / 3 + 1
du = (l - i + 1) Mod 3
If ((du = 0) And (so = 0) And (so1 = 0) And (so2 = 0)) Or ((du = 2) And (so = 0) And (so1 = 0)) = True Then
chu = " "
Else
chu = bangchu(so, du)
End If
If (du = 1) And ((so <> 0) Or (so3 <> 0) Or (so4 <> 0)) Then
chu = chu & banghang(nhom)
End If
If chu <> " " Then
If i = 1 Then
SayVNI = chu
Else
SayVNI = SayVNI & LCase(chu)
End If
End If
Next i


SayVNI = Replace(SayVNI, bangvaloi(1, 1), bangvaloi(1, 2))
SayVNI = Replace(SayVNI, bangvaloi(2, 1), bangvaloi(2, 2))
sole = Abs(Number) - Int(Abs(Number))


If sole > 0 Then
Select Case Unit
Case 0
dvt = ""
Case 1
dvt = "ñoàng"
Case 2
dvt = "Myõ kim"
Case 3
dvt = "Euro"
Case Else
dvt = Unit
End Select
Else
Select Case Unit
Case 0
dvt = IIf(Dec = 1, IIf(tam < 2, "cent", "cents"), IIf(Dec = 0, "", Dec))
Case 1
dvt = "ñoàng chaün"
Case 2
dvt = "Myõ kim chaün"
Case 3
dvt = "Euro chaün"
Case Else
dvt = Unit & " chaün"
End Select
End If
Select Case Number
Case 0
SayVNI = "": Exit Function
Case Is > 0
SayVNI = Trim(SayVNI & dvt)
Case Else
SayVNI = "AÂm " & LCase(SayVNI)
SayVNI = Trim(SayVNI & dvt)
End Select
If sole > 0 Then
SayVNI = Trim(SayVNI) & IIf(Dec = 0, " phaåy ", " vaø ")
SayVNI = SayVNI & IIf(Round(sole * 100, 0) < 10 And Dec = 0, "khoâng ", "")
SayVNI = SayVNI & LCase(SayVNI(Round(sole * 100, 0), 0, Dec))
Else
SayVNI = SayVNI
'Exceptions:
SayVNI = IIf(tam > 1, Replace(SayVNI, "penny", "pence"), SayVNI)
SayVNI = IIf(tam > 1, Replace(SayVNI, "foot", "feet"), SayVNI)


End If


'Exceptions:
SayVNI = IIf(tam > 1, Replace(SayVNI, "penny", "pence"), SayVNI)
SayVNI = IIf(tam > 1, Replace(SayVNI, "foot", "feet"), SayVNI)


End Function
Function SayUNI(Number, Optional Unit = 0, Optional Dec = 0) As String
Dim KytuUni(1 To 21, 1 To 2) As String
KytuUni(1, 1) = "ôø": KytuUni(1, 2) = ChrW(7901)
KytuUni(2, 1) = "oä": KytuUni(2, 2) = ChrW(7897)
KytuUni(3, 1) = "oá": KytuUni(3, 2) = ChrW(7889)
KytuUni(4, 1) = "aê": KytuUni(4, 2) = ChrW(259)
KytuUni(5, 1) = "aù": KytuUni(5, 2) = ChrW(225)
KytuUni(6, 1) = "aû": KytuUni(6, 2) = ChrW(7843)
KytuUni(7, 1) = "í": KytuUni(7, 2) = ChrW(237)
KytuUni(8, 1) = "ö": KytuUni(8, 2) = ChrW(432)
KytuUni(9, 1) = "ô": KytuUni(9, 2) = ChrW(417)
KytuUni(10, 1) = "oâ": KytuUni(10, 2) = ChrW(244)
KytuUni(11, 1) = "aå": KytuUni(11, 2) = ChrW(7849)
KytuUni(12, 1) = "eû": KytuUni(12, 2) = ChrW(7867)
KytuUni(13, 1) = "aü": KytuUni(13, 2) = ChrW(7861)
KytuUni(14, 1) = "aø": KytuUni(14, 2) = ChrW(224)
KytuUni(15, 1) = "eä": KytuUni(15, 2) = ChrW(7879)
KytuUni(16, 1) = "yû": KytuUni(16, 2) = ChrW(7927)
KytuUni(17, 1) = "ñ": KytuUni(17, 2) = ChrW(273)
KytuUni(18, 1) = "oà": KytuUni(18, 2) = ChrW(7891)
KytuUni(19, 1) = "yõ": KytuUni(19, 2) = ChrW(7929)
KytuUni(20, 1) = "AÂ": KytuUni(20, 2) = ChrW(194)
KytuUni(21, 1) = "ì": KytuUni(21, 2) = ChrW(236)
SayUNI = SayVNI(Number, Unit, Dec)
For i = 1 To 21


SayUNI = Replace(SayUNI, KytuUni(i, 1), KytuUni(i, 2))
Next
End Function

Mỗi lần cần xài thì em chỉ cần dùng hàm sayuni hoặc sayvni là xong, nhưng nay em muốn bổ sung thêm như sau ạ.
Khi mình gõ 5426 thì nó đọc thành năm nghìn, bốn trăm hai mươi sáu thay vì năm nghìn bốn trăm hai mươi sáu. Nhưng gõ 5000 thì nó chỉ đọc là năm nghìn thôi chứ không phải năm nghìn,.
Ngoài ra công thức gốc của nó dùng từ ngàn chứ không phải nghìn, em copy về sửa lại thì khi gõ sayvni tức là đọc theo kiểu vni thì chữ nghìn bị lỗi.
Anh chị nào biết thì giúp với ạ, cám ơn nhiều
 
Em đã tự làm đc câu 1 rồi
Sửa
Mã:
banghang(2) = "nghìn "
thành
Mã:
banghang(2) = IIf(Abs(Number) > 10 ^ 3 And Val(Right(Number, 3)) = 0, "nghìn ", "nghìn, ")

Giờ còn cái là bị lỗi font nữa thôi, có ai giúp em với ạ. Khi dùng hàm sayvni thì nó ra chữ nghìn bị lỗi ạ, thế mới ức
 
Upvote 0
không phải nghìn, mà là nghìn

copy chữ nghìn thứ nhì nhé. Nhìn giống nhưng mã khác.
 
Upvote 0
Nó vẫn vậy à anh ơi, vẫn bị lỗi anh à
 
Upvote 0
Thay "nghìn " bằng "ngh" & ChrW(236) & "n "
 
Upvote 0
Cám ơn bác ptm0412 đã hỗ trợ em.
Em đã thử cách đổi bảng mã sang VNI-Win rồi cũng không được. Mà sao kỳ vậy ta.
Cách thứ 2 của bác thì Ok nhưng thực sự đó chính là font unicode đúng không bác. Em cũng chẳng hiểu lý do thế nào.
Thanks bác nhé áp dụng cách này Okay về vấn đề hiển thị.
 
Upvote 0
Cám ơn bác ptm0412 đã hỗ trợ em.
Em đã thử cách đổi bảng mã sang VNI-Win rồi cũng không được. Mà sao kỳ vậy ta.
Cách thứ 2 của bác thì Ok nhưng thực sự đó chính là font unicode đúng không bác. Em cũng chẳng hiểu lý do thế nào.
Thanks bác nhé áp dụng cách này Okay về vấn đề hiển thị.

Cách thứ nhất nếu không được có thể là vì font hiển thị trên cửa sổ VBA đã bị thay đổi.

Cách thứ 2: ChrW(236) là ký tự mang ký số 236, trong bảng mã Unicode là ký tự ì, trong bảng mã VNI cũng là ký tự ì. Tuy nhiên với các ký số khác 2 bảng mã có thể cho ký tự khác nhau. Và các ký tự này sẽ thể hiện cho ta thấy qua trung gian của bộ Font. Font phải đúng bảng mã, nếu khác bảng mã sẽ thể hiện không đúng.
 
Upvote 0
Em cũng đã thử chọn font chữ trong cửa sổ VBA thuộc bộ VNI rồi thì thấy nó hiển thị rất tốt.
Nhưng khi ra excel thì vẫn lỗi. Thực sự em vẫn chưa hiểu lắm.
Nhưng vẫn cám ơn bác rất nhiều vì tinh thần hỗ trợ
 
Upvote 0

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

Back
Top Bottom