Code chuyển số thành chữ ( thành tiền) !

Liên hệ QC

Loan Châu

Thành viên hoạt động
Tham gia
17/6/17
Bài viết
136
Được thích
39
Giới tính
Nữ
Kính chào quý anh chị !
Tôi đang gặp rắc rối trong công việc mong quý anh chị giúp đỡ.
Đó là tôi muốn đổi các số ra thành chữ trong trong tính tiền.
ví dụ là 25000 = Hai lăm nghìn đồng chẵn.
Tôi có thử một số các tool trên mạng nhưng hay bị lỗi font quá.
Tôi rất mong nhận được sự giúp đở của quý anh chị.
Tôi cảm ơn quý anh chị trước !
Trân trọng,
Loan Châu
 
Kính chào quý anh chị !
Tôi đang gặp rắc rối trong công việc mong quý anh chị giúp đỡ.
Đó là tôi muốn đổi các số ra thành chữ trong trong tính tiền.
ví dụ là 25000 = Hai lăm nghìn đồng chẵn.
Tôi có thử một số các tool trên mạng nhưng hay bị lỗi font quá.
Tôi rất mong nhận được sự giúp đở của quý anh chị.
Tôi cảm ơn quý anh chị trước !
Trân trọng,
Loan Châu
Có thử tool này chưa bạn?
http://www.giaiphapexcel.com/diendan/threads/add-ins-cho-excel-2007-2016-32bit-và-64bit.106992/
 
Upvote 0
25000 = Hai lăm nghìn đồng chẵn.
(chỗ màu xanh) Sai bét!

(màu đỏ) Rõ ràng số đó chẵn lắm rồi. Hệ quả của việc máy móc làm theo người trước (cũng làm thế), hoặc quên mất cách đọc số ở lớp một, lớp hai rồi. Trong ngữ văn, khi chấm hết câu là xong, chỗ màu đỏ là dư thừa.
Và trên này có nhiều người phải tìm cách bỏ từ "chẵn" trong các AddIns...
 
Upvote 0
em cảm ơn anh Befain nhiều nhiều đã góp ý. Em quên để ý cái đó mất.hihi
anh ơi, em có đoạn code em sưa tầm được đọc được số ra chữ rất tốt, nhưng tác gải của code đang viết cho font Unicode mà mấy phiếu thu của em đã dung fong TCVN3 ( . vntime,..) rồi nên khi copy tiền vào vẫn lỗi font anh à.
anh xem giúp cho em với anh nhé!

Public Function docso(chuyenso) As String
s09 = Array("", " M" & ChrW(7897) & "t", " hai", " ba", " b" & ChrW(7889) & "n", " n" & ChrW(259) & "m", " s" & ChrW(225) & "u", " b" & ChrW(7843) & "y", " t" & ChrW(225) & "m", " ch" & ChrW(237) & "n")
lop3 = Array("", " tri" & ChrW(7879) & "u", " ngh" & ChrW(236) & "n", " t" & ChrW(7927))
'Stop
If Trim(chuyenso) = "" Then
DocSoUni = ""
ElseIf IsNumeric(chuyenso) = True Then
If chuyenso < 0 Then dau = ChrW(226) & "m " Else dau = ""
chuyenso = Application.WorksheetFunction.Round(Abs(chuyenso), 0)
chuyenso = " " & chuyenso
chuyenso = Replace(chuyenso, ",", "", 1)
vt = InStr(1, chuyenso, "E")
If vt > 0 Then
sonhan = Val(Mid(chuyenso, vt + 1))
chuyenso = Trim(Mid(chuyenso, 2, vt - 2))
chuyenso = chuyenso & String(sonhan - Len(chuyenso) + 1, "0")
End If
chuyenso = Trim(chuyenso)
sochuso = Len(chuyenso) Mod 9
If sochuso > 0 Then chuyenso = String(9 - (sochuso Mod 12), "0") & chuyenso
docso = ""
i = 1
lop = 1
Do
n1 = Mid(chuyenso, i, 1)
n2 = Mid(chuyenso, i + 1, 1)
n3 = Mid(chuyenso, i + 2, 1)
baso = Mid(chuyenso, i, 3)
i = i + 3
If n1 & n2 & n3 = "000" Then
If docso <> "" And lop = 3 And Len(chuyenso) - i > 2 Then s123 = " t" & ChrW(7927) Else s123 = ""
Else
If n1 = 0 Then
If docso = "" Then s1 = "" Else s1 = " kh" & ChrW(244) & "ng tr" & ChrW(259) & "m"
Else
s1 = s09(n1) & " tr" & ChrW(259) & "m"
End If
If n2 = 0 Then
If s1 = "" Or n3 = 0 Then
s2 = ""
Else
s2 = " linh"
End If
Else
If n2 = 1 Then s2 = " M" & ChrW(432) & ChrW(7901) & "i" Else s2 = s09(n2) & " m" & ChrW(432) & ChrW(417) & "i"
End If
If n3 = 1 Then
If n2 = 1 Or n2 = 0 Then s3 = " M" & ChrW(7897) & "t" Else s3 = " m" & ChrW(7889) & "t"
ElseIf n3 = 5 And n2 <> 0 Then
s3 = " l" & ChrW(259) & "m"
Else
s3 = s09(n3)
End If
If i > Len(chuyenso) Then
s123 = s1 & s2 & s3
Else
s123 = s1 & s2 & s3 & lop3(lop)
End If
End If
lop = lop + 1
If lop > 3 Then lop = 1
docso = docso & s123
If i > Len(chuyenso) Then Exit Do
Loop
If docso = "" Then docso = "kh" & ChrW(244) & "ng" Else docso = dau & Trim(docso)
Else
docso = chuyenso
End If
End Function
 
Upvote 0
@Loan Châu : Dùng add in của a Nguyen Duy Tuan (bạn search "đọc số thành chữ nhanh hơn 80%") thì VND(25.000) ra kết quả là Hai mươi lăm nghìn đồng.
 
Upvote 0
(chỗ màu xanh) Sai bét!

(màu đỏ) Rõ ràng số đó chẵn lắm rồi. Hệ quả của việc máy móc làm theo người trước (cũng làm thế), hoặc quên mất cách đọc số ở lớp một, lớp hai rồi. Trong ngữ văn, khi chấm hết câu là xong, chỗ màu đỏ là dư thừa.
Theo tôi được biết thì cái chữ CHẴN ấy không dư thừa tí nào cả
Viết "chẵn" vào để người ta chắc ăn rằng người khác không thêm gì phía sau nó được nữa. Ví dụ
- Ghi hai mươi lăm ngàn đồng ---> Người khác có thể thêm tám trăm chín mươi bảy xu ở phía sau mà không ai hay biết
- Ghi hai mươi lăm ngàn đồng chẵn ---> Đố ghi gì thêm được nữa đấy
Đương nhiên hiện nay nước ta không xài xu nên "chẵn" có thể thừa nhưng ý nghĩa ban đầu của nó là thế đấy!
 
Upvote 0
(màu đỏ) Rõ ràng số đó chẵn lắm rồi. Hệ quả của việc máy móc làm theo người trước (cũng làm thế), hoặc quên mất cách đọc số ở lớp một, lớp hai rồi. Trong ngữ văn, khi chấm hết câu là xong, chỗ màu đỏ là dư thừa.
Và trên này có nhiều người phải tìm cách bỏ từ "chẵn" trong các AddIns...

Từ "chẵn" là luật chung của hệ thống tiền tệ. Hồi xưa, người ta viết séc (cheque), nếu không kết thúc bằng đơn vị cuối cùng thì phải thêm từ "chẵn" (tiếng Anh là "even" - và được hiểu là "chính xác con số đó, không thêm, khong bớt 1 đồng, 1 xu").
Về sau này luật đó được đơn giản bằng cách gạch thêm một gạch dài sau từ cuối. Ngừoi đọc sẽ hiểu đến đó là hết rồi.

(gạch dài cũng áp dụng cho cả con số. Nếu số kêt thúc bằng đơn vị xu thì không sao. Nhưng nếu kết thúc bằng đơn vị đồng/đô la thì ngừoi ta thêm 1 gạch)
 
Upvote 0
(chỗ màu xanh) Sai bét!

(màu đỏ) Rõ ràng số đó chẵn lắm rồi. Hệ quả của việc máy móc làm theo người trước (cũng làm thế), hoặc quên mất cách đọc số ở lớp một, lớp hai rồi. Trong ngữ văn, khi chấm hết câu là xong, chỗ màu đỏ là dư thừa.
Và trên này có nhiều người phải tìm cách bỏ từ "chẵn" trong các AddIns...

em cảm ơn anh Befain nhiều nhiều đã góp ý. Em quên để ý cái đó mất.hihi
anh ơi, em có đoạn code em sưa tầm được đọc được số ra chữ rất tốt, nhưng tác gải của code đang viết cho font Unicode mà mấy phiếu thu của em đã dung fong TCVN3 ( . vntime,..) rồi nên khi copy tiền vào vẫn lỗi font anh à.
anh xem giúp cho em với anh nhé!

Public Function docso(chuyenso) As String
s09 = Array("", " M" & ChrW(7897) & "t", " hai", " ba", " b" & ChrW(7889) & "n", " n" & ChrW(259) & "m", " s" & ChrW(225) & "u", " b" & ChrW(7843) & "y", " t" & ChrW(225) & "m", " ch" & ChrW(237) & "n")
lop3 = Array("", " tri" & ChrW(7879) & "u", " ngh" & ChrW(236) & "n", " t" & ChrW(7927))
'Stop
If Trim(chuyenso) = "" Then
DocSoUni = ""
ElseIf IsNumeric(chuyenso) = True Then
If chuyenso < 0 Then dau = ChrW(226) & "m " Else dau = ""
chuyenso = Application.WorksheetFunction.Round(Abs(chuyenso), 0)
chuyenso = " " & chuyenso
chuyenso = Replace(chuyenso, ",", "", 1)
vt = InStr(1, chuyenso, "E")
If vt > 0 Then
sonhan = Val(Mid(chuyenso, vt + 1))
chuyenso = Trim(Mid(chuyenso, 2, vt - 2))
chuyenso = chuyenso & String(sonhan - Len(chuyenso) + 1, "0")
End If
chuyenso = Trim(chuyenso)
sochuso = Len(chuyenso) Mod 9
If sochuso > 0 Then chuyenso = String(9 - (sochuso Mod 12), "0") & chuyenso
docso = ""
i = 1
lop = 1
Do
n1 = Mid(chuyenso, i, 1)
n2 = Mid(chuyenso, i + 1, 1)
n3 = Mid(chuyenso, i + 2, 1)
baso = Mid(chuyenso, i, 3)
i = i + 3
If n1 & n2 & n3 = "000" Then
If docso <> "" And lop = 3 And Len(chuyenso) - i > 2 Then s123 = " t" & ChrW(7927) Else s123 = ""
Else
If n1 = 0 Then
If docso = "" Then s1 = "" Else s1 = " kh" & ChrW(244) & "ng tr" & ChrW(259) & "m"
Else
s1 = s09(n1) & " tr" & ChrW(259) & "m"
End If
If n2 = 0 Then
If s1 = "" Or n3 = 0 Then
s2 = ""
Else
s2 = " linh"
End If
Else
If n2 = 1 Then s2 = " M" & ChrW(432) & ChrW(7901) & "i" Else s2 = s09(n2) & " m" & ChrW(432) & ChrW(417) & "i"
End If
If n3 = 1 Then
If n2 = 1 Or n2 = 0 Then s3 = " M" & ChrW(7897) & "t" Else s3 = " m" & ChrW(7889) & "t"
ElseIf n3 = 5 And n2 <> 0 Then
s3 = " l" & ChrW(259) & "m"
Else
s3 = s09(n3)
End If
If i > Len(chuyenso) Then
s123 = s1 & s2 & s3
Else
s123 = s1 & s2 & s3 & lop3(lop)
End If
End If
lop = lop + 1
If lop > 3 Then lop = 1
docso = docso & s123
If i > Len(chuyenso) Then Exit Do
Loop
If docso = "" Then docso = "kh" & ChrW(244) & "ng" Else docso = dau & Trim(docso)
Else
docso = chuyenso
End If
End Function
 
Upvote 0
Theo tôi được biết thì cái chữ CHẴN ấy không dư thừa tí nào cả
Viết "chẵn" vào để người ta chắc ăn rằng người khác không thêm gì phía sau nó được nữa. Ví dụ
- Ghi hai mươi lăm ngàn đồng ---> Người khác có thể thêm tám trăm chín mươi bảy xu ở phía sau mà không ai hay biết
- Ghi hai mươi lăm ngàn đồng chẵn ---> Đố ghi gì thêm được nữa đấy
Đương nhiên hiện nay nước ta không xài xu nên "chẵn" có thể thừa nhưng ý nghĩa ban đầu của nó là thế đấy!
cảm ơn anh ndu96081631 đã giải thích để em được hiểu vấn đề hơn.
 
Upvote 0
Từ "chẵn" là luật chung của hệ thống tiền tệ. Hồi xưa, người ta viết séc (cheque), nếu không kết thúc bằng đơn vị cuối cùng thì phải thêm từ "chẵn" (tiếng Anh là "even" - và được hiểu là "chính xác con số đó, không thêm, khong bớt 1 đồng, 1 xu").
Về sau này luật đó được đơn giản bằng cách gạch thêm một gạch dài sau từ cuối. Ngừoi đọc sẽ hiểu đến đó là hết rồi.

(gạch dài cũng áp dụng cho cả con số. Nếu số kêt thúc bằng đơn vị xu thì không sao. Nhưng nếu kết thúc bằng đơn vị đồng/đô la thì ngừoi ta thêm 1 gạch)
cảm ơn anh Vetmini đã giải thích để em được hiểu vấn đề hơn.
Bây giờ viết như thế này phải hông anh: Hai mươi lăm nghìn đồng ./.
 
Upvote 0
Theo tôi được biết thì cái chữ CHẴN ấy không dư thừa tí nào cả
Viết "chẵn" vào để người ta chắc ăn rằng người khác không thêm gì phía sau nó được nữa. Ví dụ
- Ghi hai mươi lăm ngàn đồng ---> Người khác có thể thêm tám trăm chín mươi bảy xu ở phía sau mà không ai hay biết
Vâng anh. Em có ghi một câu " Trong ngữ văn, khi chấm hết câu là xong" mà.

Anh chỉ giúp cho em biết người ta chỉnh sửa trong trường hợp nào?
- Văn bản in thì tẩy rồi in tiếp vào hay dùng bút viết thêm vào?
- Văn bản viết tay thì viết chèn vào?
- Trong trường hợp nào vẫn chấp nhận văn bản tẩy xóa/ viết thêm? Chấp nhận ở mức độ nào?

Nếu đã cố tình chỉnh sửa thì chữ "chẵn" vẫn sửa được ạ. In laser, giấy A4 thông dụng (định lượng 70-90 gsm) thì vẫn có cách xóa và in lại như mới ạ.
 
Upvote 0
em có đoạn code em sưa tầm được đọc được số ra chữ rất tốt, nhưng tác gải của code đang viết cho font Unicode mà mấy phiếu thu của em đã dung fong TCVN3 ( . vntime,..) rồi nên khi copy tiền vào vẫn lỗi font anh à.
Bạn có 2 lựa chọn:
1> Tìm hàm nào đó đọc ra chữ dùng mã TCVN3
2> Tìm hàm convert Unicode sang TCVN rồi lồng vào hàm bạn đang có
Nếu là tôi thì tôi chọn cách 2
 
Upvote 0
Vâng anh. Em có ghi một câu " Trong ngữ văn, khi chấm hết câu là xong" mà.

Anh chỉ giúp cho em biết người ta chỉnh sửa trong trường hợp nào?
- Văn bản in thì tẩy rồi in tiếp vào hay dùng bút viết thêm vào?
- Văn bản viết tay thì viết chèn vào?
- Trong trường hợp nào vẫn chấp nhận văn bản tẩy xóa/ viết thêm? Chấp nhận ở mức độ nào?

Nếu đã cố tình chỉnh sửa thì chữ "chẵn" vẫn sửa được ạ. In laser, giấy A4 thông dụng (định lượng 70-90 gsm) thì vẫn có cách xóa và in lại như mới ạ.
Tôi biết vụ này khi viết mấy cái hóa đơn (đương nhiên bằng tay). Khi viết xong số tiền bằng chữ, người ta yêu cầu phải viết chữ "chẵn" vào cuối và người ta giải thích chuyện này như tôi đã nói ở trên
Còn cái vụ dấu chấm thay được cho chữ chẵn? Cũng được nhưng không chắc ăn đâu (dấu chấm nó nhỏ quá, dễ bị lừa)
 
Upvote 0
Bạn có 2 lựa chọn:
1> Tìm hàm nào đó đọc ra chữ dùng mã TCVN3
2> Tìm hàm convert Unicode sang TCVN rồi lồng vào hàm bạn đang có
Nếu là tôi thì tôi chọn cách 2
Em cảm ơn anh ndu96081631 đã hướng dẫn em phương án lựa chọn, nhưng khó cho em là em hổng biết gì nhiều về VBA, em mạo muội mong anh giúp long hàm convert Unicode sang TCVN cho code trên cho em với.
em cảm ơn anh nhiều trước ạ !
 
Upvote 0
@ Chủ thớt:
Nếu có chuyển số tiền sang chữ mà viết tay thì nhớ gạch hết phần giấy trống ở phía sau (dưới) theo hướng dẫn bài #8 nhé.
Vì giả sử có viết chữ "chẵn" thì mình viết thêm: "... chẵn và lẻ không phẩy chín đồng".
-------
Chủ thớt tải file ở bài #2 về dùng là có rồi!! Sao cứ hỏi hoài vậy???
 
Upvote 0
Ừ chỉ vậy thôi!
Nó gần giống câu chuyện trong cơ quan nhà nước mà tôi nghe được thế này: "Người ta yêu cầu khi định dạng ngày tháng năm, nếu tháng nhỏ hơn 3 thì phải thêm con zero đằng trước". Mục đích cũng là sợ người ta sửa. Ví dụ 21/2/2017 mà cho thêm con số 1 trước số 2 sẽ thành 21/12/2017 (từ tháng 3 trở đi chẳng sợ)
 
Upvote 0
@ Chủ thớt:
Nếu có chuyển số tiền sang chữ mà viết tay thì nhớ gạch hết phần giấy trống ở phía sau (dưới) theo hướng dẫn bài #8 nhé.
Vì giả sử có viết chữ "chẵn" thì mình viết thêm: "... chẵn và lẻ không phẩy chín đồng".
-------
Chủ thớt tải file ở bài #2 về dùng là có rồi!! Sao cứ hỏi hoài vậy???
anh befaint đừng la em tội nghiệp anh. huhu, em viết nó cứ lỗi font.
 
Upvote 0
Web KT
Back
Top Bottom