Mình đã sư dụng 2 code sau đây lâu rồi nhưng trên office 2003, hiện nay sử dụng trên 2010 bị lỗi (vẫn đọc được số ra chữ nhưng bị mã không đọc được). do mình làm 2 code trên cùng file bị lỗi rồi.
- Mình muốn cùng một số(Á=1234567890) khi dùng vnd(A1)="........đồng"; khi dùng vnm(A1)="......mét vuông".
1. code1 :
Public Function VND(BaoNhieu)
Dim KetQua, SoTien, Nhom, Chu, Dich, S1, S2, S3 As String
Dim l, J, Vitri As Byte, S As Double
Dim Hang, Doc, Dem
If BaoNhieu = 0 Then
KetQua = "Không đồng"
Else
If Abs(BaoNhieu) >= 1E+15 Then
KetQua = "Số quá lớn"
Else
If BaoNhieu < 0 Then
KetQua = "Âm" & Space(1)
Else
KetQua = Space(0)
End If
SoTien = Format(Abs(BaoNhieu), "##############0.00")
SoTien = Right(Space(15) & SoTien, 18)
Hang = Array("None", "trăm", "mươi", "gì đó")
Doc = Array("None", "ngàn tỷ", "tỷ", "triệu", "ngàn", "đồng", "")
Dem = Array("None", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín")
For l = 1 To 6
Nhom = Mid(SoTien, l * 3 - 2, 3)
If Nhom <> Space(3) Then
Select Case Nhom
Case "000"
If l = 5 Then
Chu = "đồng" & Space(1)
Else
Chu = Space(0)
End If
Case "00"
Chu = "chẳn"
Case Else
S1 = Left(Nhom, 1)
S2 = Mid(Nhom, 2, 1)
S3 = Right(Nhom, 1)
Chu = Space(0)
Hang(3) = Doc(l)
For J = 1 To 3
Dich = Space(0)
S = Val(Mid(Nhom, J, 1))
If S > 0 Then
Dich = Dem(S) & Space(1) & Hang(J) & Space(1)
End If
Select Case J
Case 2 And S = 1
Dich = "mười" & Space(1)
Case 3 And S = 0 And Nhom <> Space(2) & "0"
Dich = Hang(J) & Space(1)
Case 3 And S = 5 And S2 <> Space(1) And S2 <> "0"
Dich = "l" & Mid(Dich, 2)
Case 2 And S = 0 And S3 <> "0"
If (S1 >= "1" And S1 <= "9") Or (S1 = "0" And l = 4) Then
Dich = "lẻ" & Space(1)
End If
End Select
Chu = Chu & Dich
Next J
End Select
Vitri = InStr(1, Chu, "mươi một", 1)
If Vitri > 0 Then Mid(Chu, Vitri, 9) = "mươi mốt"
KetQua = KetQua & Chu
End If
Next l
End If
End If
VND = UCase(Left(KetQua, 1)) & Mid(KetQua, 2)
End Function
2. code 2:
Public Function VNM(BaoNhieu)
Dim KetQua, SoTien, Nhom, Chu, Dich, S1, S2, S3 As String
Dim l, J, Vitri As Byte, S As Double
Dim Hang, Doc, Dem
If BaoNhieu = 0 Then
KetQua = "Không mét vuông"
Else
If Abs(BaoNhieu) >= 1E+15 Then
KetQua = "Số quá lớn"
Else
If BaoNhieu < 0 Then
KetQua = "Âm" & Space(1)
Else
KetQua = Space(0)
End If
SoTien = Format(Abs(BaoNhieu), "##############0.00")
SoTien = Right(Space(15) & SoTien, 18)
Hang = Array("None", "trăm", "mươi", "gì đó")
Doc = Array("None", "ngàn tỷ", "tỷ", "triệu", "ngàn", "mét vuông", "")
Dem = Array("None", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín")
For l = 1 To 6
Nhom = Mid(SoTien, l * 3 - 2, 3)
If Nhom <> Space(3) Then
Select Case Nhom
Case "000"
If l = 5 Then
Chu = "mét vuông" & Space(1)
Else
Chu = Space(0)
End If
Case "00"
Chu = "chẳn"
Case Else
S1 = Left(Nhom, 1)
S2 = Mid(Nhom, 2, 1)
S3 = Right(Nhom, 1)
Chu = Space(0)
Hang(3) = Doc(l)
For J = 1 To 3
Dich = Space(0)
S = Val(Mid(Nhom, J, 1))
If S > 0 Then
Dich = Dem(S) & Space(1) & Hang(J) & Space(1)
End If
Select Case J
Case 2 And S = 1
Dich = "mười" & Space(1)
Case 3 And S = 0 And Nhom <> Space(2) & "0"
Dich = Hang(J) & Space(1)
Case 3 And S = 5 And S2 <> Space(1) And S2 <> "0"
Dich = "l" & Mid(Dich, 2)
Case 2 And S = 0 And S3 <> "0"
If (S1 >= "1" And S1 <= "9") Or (S1 = "0" And l = 4) Then
Dich = "lẻ" & Space(1)
End If
End Select
Chu = Chu & Dich
Next J
End Select
Vitri = InStr(1, Chu, "mươi một", 1)
If Vitri > 0 Then Mid(Chu, Vitri, 9) = "mươi mốt"
KetQua = KetQua & Chu
End If
Next l
End If
End If
VNM = UCase(Left(KetQua, 1)) & Mid(KetQua, 2)
End Function