Tạo công thức chuyển số thành chữ trong Excel
Tạo một công thức người dùng trong Excel theo code dưới đây, mở một workbook, chọn Tool --> Macro --> Visual Basic Editor ->Insert ->Modules, gián phần công thức sau vào màn hình cập nhật.
------------------------------------------
Function CHUSO(so As Double) As String
Dim Chu As String, solop As Integer, so1 As Double, tg As Double
If so <= 0 Or so = Null Then
CHUSO = ""
End If
ReDim term(10) As String, lop(6) As Double, tlop(6) As String
term(1) = " mét"
term(2) = " hai"
term(3) = " ba"
term(4) = " bèn"
term(5) = " n¨m"
term(6) = " s¸u"
term(7) = " bÈy"
term(8) = " t¸m"
term(9) = " chÝn"
'-------------------
tlop(1) = ""
tlop(2) = " ngµn"
tlop(3) = " triÖu"
tlop(4) = " tû"
tlop(5) = " ngµn tû"
'----------------
so1 = so
solop = 1
Do While so1 > 0
tg = so1
so1 = Int(so1 / 1000)
lop(solop) = tg - so1 * 1000
solop = solop + 1
Loop
i = solop - 1
Chu = ""
Do While i > 0
so1 = lop(i)
If so1 > 0 Then
hangtram = so1 - 100
hangchuc = (so1 - hangtram * 100) - 10
hangdonvi = so1 - (so1 - 10) * 10
If hangtram > 0 Then
'Chu so hang tram c¢ nghªa so1>=100
Chu = Chu + term(hangtram) + " tr¨m"
End If
'Xet chu so hang chuc
If hangchuc > 1 Then
Chu = Chu + term(hangchuc) + " m¬i"
ElseIf hangchuc = 1 Then
Chu = Chu + " mêi"
ElseIf hangchuc = 0 And so1 > 100 And hangdonvi <> 0 Then
Chu = Chu + " linh"
End If
' Xet ch§ s– h…ng ón v«
If hangdonvi <> 5 And hangdonvi <> 0 Then
Chu = Chu + term(hangdonvi)
ElseIf hangdonvi = 5 And hangchuc <> 0 Then
Chu = Chu + " l¨m "
ElseIf hangdonvi = 5 And hangchuc = 0 Then
Chu = Chu + " n¨m "
End If
Chu = Chu + tlop(i)
End If
' Xet lop ke tiep
i = i - 1
Loop
Chu = Trim(Chu)
If Chu <> "" Then
Chu = UCase(Left(Chu, 1)) & Right(Chu, Len(Chu) - 1)
End If
CHUSO = Chu
End Function
------------------------------------
(Ghi chú: chữ một hai ba bốn ... trên với mã Font TCVN, bạn có thể đổi lại theo yêu cầu)
Tiếp tục đóng cửa sổ Visual Basic Editor, quay về bảng tính Excel, ví dụ bây giờ tại ô A1 bạn có số 12345 cần chuyển thành chữ tại A2, hãy gõ vào A2 công thức =CHUSO(A1). (Lưu ý chọn Font chữ phù hợp).
Test this please.
Chạy ngon rồi bác Admin à! Nếu có thể thì bác bỏ cái chữ bằng chữ ở trước mỗi phần dịch đi, vì thực tế nếu in hoá đơn hay in cái gì đó thì phần này đã có sẵn rồi.
Nếu có sẵn tài liệu trên mạng về cách tạo File .xla thì bác cho em xin một bản để em học tập nhé! Xin cảm ơn!
Các bác copy toàn bộ đoạn này vào visual Basic rồi làm như hướng dẫn của HyperVN í.
Hàm có tên là: =convert(a1)
Mình thấy bài của "anhoanh" cũng được đấy. Còn đây là đổi số sang chữ bằng tiếng việt của mình:
Xin mô tả như sau: Sử dụng Font chữ "VNI-..." trong bảng tính. Hàm này chia con số của bạn thành từng nhóm 3 con số, đọc từng nhóm rồi ghép lại thành bộ đọc đầy đủ thông qua hàm DocsoVNI
' Doc 3 chu so phuc vu cho docsongVNI
Function Doc3SoVNI(bachuso)
Dim Dvi, Chuc, Tram, Dodai
Dim c(9)
c(0) = "": c(1) = "moät ": c(2) = "hai ": c(3) = "ba ": c(4) = "boán ":
c(5) = "naêm ": c(6) = "saùu ": c(7) = "baûy ": c(8) = "taùm ": c(9) = "chín "
bachuso = Trim(Str(bachuso))
Dodai = Len(bachuso)
Select Case Dodai
Case 1
Dvi = bachuso
Case 2
Dvi = Right(bachuso, 1)
Chuc = Left(bachuso, 1)
Case Else
Dvi = Right(bachuso, 1)
Chuc = Left(Right(bachuso, 2), 1)
Tram = Left(Right(bachuso, 3), 1)
End Select
Doc3SoVNI = c(Dvi)
If Dvi = 5 Then
If Chuc = 0 Then
Doc3SoVNI = "naêm "
Else
Doc3SoVNI = "laêm "
End If
End If
If Dvi = 1 Then
If Chuc > 1 Then
Doc3SoVNI = "moát "
Else
Doc3SoVNI = "moät "
End If
End If
If Chuc > 0 Then
If Chuc = 1 Then
Doc3SoVNI = "möôøi " + Doc3SoVNI
Else
Doc3SoVNI = c(Chuc) + "möôi " + Doc3SoVNI
End If
End If
If Chuc = 0 And Dvi > 0 Then Doc3SoVNI = "leû " + Doc3SoVNI
If Tram = 0 Then
If Chuc = 0 And Dvi = 0 Then
Doc3SoVNI = ""
Else
Doc3SoVNI = "khoâng traêm " + Doc3SoVNI
End If
Else
Doc3SoVNI = c(Tram) + "traêm " + Doc3SoVNI
End If
End Function
' Doi so nguyen ra chu
Function DocsoNGVNI(Songuyen)
Dim Ldvi, Lngan, Ltrieu, Lty, Lngty, Le, Dodai
If Songuyen = 0 Then
DocsoNGVNI = "khoâng "
Else
Songuyen = Trim(Str(Songuyen))
Dodai = Len(Songuyen)
Songuyen = Space(15 - Dodai) + Songuyen
Ldvi = Val(Right(Songuyen, 3))
Lngan = Val(Mid(Songuyen, 10, 3))
Ltrieu = Val(Mid(Songuyen, 7, 3))
Lty = Val(Mid(Songuyen, 4, 3))
Lngty = Val(Left(Songuyen, 3))
If Ldvi <> 0 Then
DocsoNGVNI = Doc3SoVNI(Ldvi)
End If
If Lngan <> 0 Then
DocsoNGVNI = Doc3SoVNI(Lngan) + "ngaøn " + DocsoNGVNI
End If
If Ltrieu <> 0 Then
DocsoNGVNI = Doc3SoVNI(Ltrieu) + "trieäu " + DocsoNGVNI
End If
If Lty <> 0 Then
DocsoNGVNI = Doc3SoVNI(Lty) + "tyû " + DocsoNGVNI
End If
If Lngty <> 0 Then
DocsoNGVNI = Doc3SoVNI(Lngty) + "ngaøn tyû " + DocsoNGVNI
End If
If Left(DocsoNGVNI, 13) = "khoâng traêm " Then DocsoNGVNI = Right(DocsoNGVNI, Len(DocsoNGVNI) - 13)
If Left(DocsoNGVNI, 4) = "leû " Then DocsoNGVNI = Right(DocsoNGVNI, Len(DocsoNGVNI) - 4)
End If
End Function
' Doc so bat ky VNI
Function DocsoVNI(So)
Dim Le, Am, Dodai, i
If Len(Trim(So)) > 16 Then DocsoVNI = "Giôùi haïn soá thöïc trong Excel laø 15 soá ! Xem laïi soá cuûa baïn ?": Exit Function
If So < 0 Then
So = -So
Am = "AÂm "
End If
So = Trim(Str(So))
Dodai = Len(So)
If Val(So) = 0 Then
DocsoVNI = "khoâng "
Else
For i = 1 To Dodai - 1
If Mid(So, i, 1) = "." Then
Le = Right(So, Dodai - i)
So = Val(Left(So, i - 1))
Exit For
Else
So = So
Le = 0
End If
Next i
If Le = 0 Then
DocsoVNI = DocsoNGVNI(So)
Else
If So = 0 Then DocsoVNI = "khoâng phaûy " + DocsoNGVNI(Le)
If So > 0 Then DocsoVNI = DocsoNGVNI(So) + "phaûy " + DocsoNGVNI(Le)
End If
End If
DocsoVNI = Am + DocsoVNI
DocsoVNI = UCase(Left(DocsoVNI, 1)) + Right(DocsoVNI, Len(DocsoVNI) - 1)
End Function
Một cách sử dụng khác về "đọc số tiền thành chữ" cho các bạn có thêm lựa chọn.
Nếu bạn chưa biết về macro thì bạn có thể dùng file này.
Đến bây giờ tôi biết được rằng EXCEL 2003 (máy tính Tôi đang dùng) có một hạn chế là: "Nếu một ô (cells) định dạng kiểu số thì chỉ nhập được số tối đa 15 chữ số", khi nhập thêm chữ số thứ 16, 17,... vào phầncuối và Enter thì các chữ số này lập tức biến thành số 0, có nghĩa là nhập số vào không đúng như ý mình thì đọc làm sao cho đúng con số của mình gõ vào. Nó chỉ đọc theo số đang thấy trên cells (là số sai). Vì vậy Tôi không cần cố gắng viết thêm phần code để đọc số nhiều hơn 15 chữ số.
Các Bạn thử nhập vào cell một số có 16 chữ số ví dụ: 1234567890123456, khi Enter thì trong cell lại là số 1234567890123450, tương tự số có 17 chữ số ví dụ: 12345678901234567 lại trở thành số 12345678901234500. Bó tay phải không?
Không biết trong các phiên bản sau này của EXCEL có bị như vậy không? Vì chưa có dịp thử.
Không cần phải rườm rà như thế. Bạn nào cần để lại địa chỉ mail mình sẽ gửi cho, khỏi lo chuyện bản quyền....
Đọc số thành chữ thì có rất nhiều AddIn đễ sử dụng.Không cần phải rườm rà như thế. Bạn nào cần để lại địa chỉ mail mình sẽ gửi cho, khỏi lo chuyện bản quyền....