[Nhờ giúp đỡ] Hàm chuyển số khối lượng (tấn, tạ, yến) thành chữ. (1 người xem)

Liên hệ QC

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

nguyendu277

Thành viên chính thức
Tham gia
7/1/11
Bài viết
51
Được thích
5
Hiện tại mình đã có hàm chuyển số (khối lượng) thành chữ, ví dụ:

1.025,58 -> Một ngàn không trăm hai năm phảy năm tám tấn.

Do yêu cầu công việc cần đọc chính xác hơn, ví dụ sẽ phải đọc là

1.025,58 -> Một ngàn không trăm hai mươi năm tấn, năm tám mươi kilogam.

hoặc -> Một ngàn không trăm hai mươi năm tấn, năm tạ, tám yến.

Rât mong được các bạn cho mình giải pháp để viết hàm này.
 

File đính kèm

Hiện tại mình đã có hàm chuyển số (khối lượng) thành chữ, ví dụ:

1.025,58 -> Một ngàn không trăm hai năm phảy năm tám tấn.

Do yêu cầu công việc cần đọc chính xác hơn, ví dụ sẽ phải đọc là

1.025,58 -> Một ngàn không trăm hai mươi năm tấn, năm tám mươi kilogam.

hoặc -> Một ngàn không trăm hai mươi năm tấn, năm tạ, tám yến.

Rât mong được các bạn cho mình giải pháp để viết hàm này.
Bạn dùng hàm này thử:
PHP:
Function KhoiLuong(Number) As String
Dim MyArray
Dim Str
Str = Format(Int(Abs(Number)), "000000000000000000")
MyArray = Array("không ", "m" & ChrW(7897) & "t ", "hai ", "ba ", "b" & ChrW(7889) & "n ", "n" & ChrW(259) & "m ", "sáu ", "b" & ChrW(7843) & "y ", "tám ", "chín ", "tri" & ChrW(7879) & "u, ", "ngàn, ", "t" & ChrW(7927) & ", ", "tri" & ChrW(7879) & "u, ", "ngàn, ", "", "tr" & ChrW(259) & "m ", "m" & ChrW(432) & ChrW(417) & "i ", "không " & "m" & ChrW(432) & ChrW(417) & "i" & " không ", "không " & "m" & ChrW(432) & ChrW(417) & "i", "l" & ChrW(7867), "m" & ChrW(432) & ChrW(417) & "i" & " không", "m" & ChrW(432) & ChrW(417) & "i", "m" & ChrW(432) & ChrW(417) & "i" & " n" & ChrW(259) & "m", "m" & ChrW(432) & ChrW(417) & "i" & " l" & ChrW(259) & "m", "m" & ChrW(7897) & "t " & "m" & ChrW(432) & ChrW(417) & "i", "m" & ChrW(432) & ChrW(7901) & "i", "m" & ChrW(432) & ChrW(417) & "i" & " m" & ChrW(7897) & "t", "m" & ChrW(432) & ChrW(417) & "i" & " m" & ChrW(7889) & "t", "Âm ")
If Str = "000000000000000000" Then
    KhoiLuong = MyArray(0) & "t" & ChrW(7845) & "n"
    GoTo KhongTan
End If
For i = 1 To Len(Str)
If Left(Str, i) <> 0 And Mid(Str, (Int((i + 2) / 3) - 1) * 3 + 1, 3) <> 0 Then
    KhoiLuong = KhoiLuong & MyArray(Mid(Str, i, 1)) & MyArray(-(9 + i / 3) * (i Mod 3 = 0) - (15 + i Mod 3) * (i Mod 3 <> 0))
ElseIf i = 9 And Mid(Str, 7, 3) = 0 And Left(Str, 6) <> 0 Then
    KhoiLuong = KhoiLuong & MyArray(12)
End If
Next
KhoiLuong = Trim(Replace(Replace(Replace(Replace(Replace(Replace(KhoiLuong, MyArray(18), MyArray(15)), MyArray(19), MyArray(20)), MyArray(21), MyArray(22)), MyArray(23), MyArray(24)), MyArray(25), MyArray(26)), MyArray(27), MyArray(28)))
If Number < 0 Then
KhoiLuong = MyArray(29) & KhoiLuong
End If
KhoiLuong = Replace(KhoiLuong & " t" & ChrW(7845) & "n", ", t" & ChrW(7845) & "n", " t" & ChrW(7845) & "n")
KhongTan:
If Abs(Number) - Int(Abs(Number)) > 0 Then
    If KhoiLuong = "không t" & ChrW(7845) & "n" Then KhoiLuong = ""
    Str = Format((Abs(Number) - Int(Abs(Number))) * 100, "00")
    If Left(Str, 1) <> 0 Then KhoiLuong = KhoiLuong & IIf(KhoiLuong = "", "", ", ") & MyArray(Left(Str, 1)) & "t" & ChrW(7841)
    If Right(Str, 1) <> 0 Then KhoiLuong = KhoiLuong & IIf(KhoiLuong = "", "", ", ") & MyArray(Right(Str, 1)) & "y" & ChrW(7871) & "n"
End If
KhoiLuong = KhoiLuong & "."
KhoiLuong = UCase(Left(KhoiLuong, 1)) & Mid(KhoiLuong, 2)
End Function
 
Cám ơn bạn rất nhiều, hàm sử dụng rất tốt ạ lại gọn nhẹ nữa, lần nữa cảm ơn bạn rất nhiều.
 
các bác ơi
cái hàn gì kia thì mình bắt đầu sử dụng như nào nhỉ
gõ vào đâu trong bảng excel
 
Web KT

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

Back
Top Bottom