Em có hàm như sau, lấy từ GPE
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
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