Add-in: Đổi số sang chữ trong Excel sử dụng font Unicode

  • Thread starter Thread starter infes
  • Ngày gửi Ngày gửi
Liên hệ QC
Mình mò mẫn tới trang 12 thì hoa cả mắt, mình nhờ các bạn giúp bỏ từ "chẳn" trong cái đổi số này, cảm ơn các bạn nhiều
VD: 456.789,98 nó đọc là "bốn trăm năm mươi sáu triệu, bảy trăm chín mươi ngàn đồng chẵn"
mình muốn nó đọc là " bốn trăm năm mươi sáu triệu, bảy trăm tám mươi chín ngàn đồng", Không cần độc 2 số lẻ ở sau và không cần từ chẳn
Ai giúp được mình cảm ơn nhiều
Hình như có điểu gì đó không ổn với cách đọc số 456.789,98 là "bốn trăm năm mươi sáu triệu, bảy trăm chín mươi ngàn đồng chẵn"
 
Hình như có điểu gì đó không ổn với cách đọc số 456.789,98 là "bốn trăm năm mươi sáu triệu, bảy trăm chín mươi ngàn đồng chẵn"
Bạn ơi, có addin nào đọc được số kiểu 1234 thành "một ngàn, hai trăm ba mươi bốn đồng" và 1230 thành "một ngàn, hai trăm ba mươi đồng chẵn" không bạn?
 
Nếu vậy bạn tự tìm trong diễn đàn nhiều lắm bạn.
@giaiphap.
Bạn ơi, nếu file đọc số mà bị lỗi kiểu 10.092.400 đọc thành mười triệu, chín hai ngàn, bốn trăm đồng.
Mình muốn sửa code thì sửa ở đoạn nào được bạn?
Cụ thể mình có mở 1 chủ đề.
Bạn giúp mình với.
http://www.giaiphapexcel.com/forum/...a-add-in-đổi-số-thành-chữ&p=715417#post715417
 
Cài này đọc không cần dấy phẩy tách giữa các phần thì đẹp.
 
có cách nào để nó có thêm chữ "Bằng chữ" nằm phía trước không mấy bác
 
Mình tải n2TEVUni.rar cũng bị lỗi font chữ khi dùng hàm =USVN(). Ad làm ơn giúp mình với. Tks!
 
Mình mới mua máy mới cài sẵn win7 64bit và office 2010 bản 64bit, mình không biết nên cài addins doiso vào nhưng file xử lý rất chậm, mang qua máy cũ chạy bình thường. Giờ mình cài lại office 32bit nhưng vân bị chậm là sao? có cách nào khắc phục không? Hay file bị lỗi rồi hoặc do nguyên nhân nào khác. Ai biết cách xử lý xin chỉ giáo???
 
Mình mới mua máy mới cài sẵn win7 64bit và office 2010 bản 64bit, mình không biết nên cài addins doiso vào nhưng file xử lý rất chậm, mang qua máy cũ chạy bình thường. Giờ mình cài lại office 32bit nhưng vân bị chậm là sao? có cách nào khắc phục không? Hay file bị lỗi rồi hoặc do nguyên nhân nào khác. Ai biết cách xử lý xin chỉ giáo???
Có rất nhiều nguyên nhân dẫn đến "chậm" máy. Mà nguyên nhân do bản thân người sử dụng gây ra chiếm tỷ lệ cao. Có khi tận mắt thấy tay sờ còn không sửa được ấy chứ.
Lỗi của bạn có xuất hiện thông báo gì không? Chữ thông báo chính xác là gì?
 
Có rất nhiều nguyên nhân dẫn đến "chậm" máy. Mà nguyên nhân do bản thân người sử dụng gây ra chiếm tỷ lệ cao. Có khi tận mắt thấy tay sờ còn không sửa được ấy chứ.
Lỗi của bạn có xuất hiện thông báo gì không? Chữ thông báo chính xác là gì?
Chả có thông báo lỗi gì hết, chỉ có cái Calculating xử lý chậm thôi. File mới bình thường, mà file này là file kế toán nên làm lại phức tạp lắm. Nhưng khổ nỗi chép qua máy cũ nó vẫn chạy bình thường mới ác.
 
Đây là hàm đổi số ra chữ cho 3 bảng mã :
Unicode: hàm DocSoUni
Vni Window: hàm DocSoVni
TCVN3 ABC: hàm DocSoAbc
Các bạn có thể tải tập tin DocsoVn.zip có sẳn 3 hàm trên.

Mã:
'=====================
Function DocSoVni(conso) As String
s09 = Array("", " moät", " hai", " ba", " boán", " naêm", " saùu", " baûy", " taùm", " chín")
lop3 = Array("", " trieäu", " nghìn", " tyû")
If Trim(conso) = "" Then
  DocSoVni = ""
ElseIf IsNumeric(conso) = True Then
  If conso < 0 Then dau = "aâm " Else dau = ""
  conso = Application.WorksheetFunction.Round(Abs(conso), 0)
  conso = " " & conso
  conso = Replace(conso, ",", "", 1)
  vt = InStr(1, conso, "E")
  If vt > 0 Then
    sonhan = Val(Mid(conso, vt + 1))
    conso = Trim(Mid(conso, 2, vt - 2))
    conso = conso & String(sonhan - Len(conso) + 1, "0")
  End If
  conso = Trim(conso)
  sochuso = Len(conso) Mod 9
  If sochuso > 0 Then conso = String(9 - (sochuso Mod 12), "0") & conso
  docso = ""
  i = 1
  lop = 1
  Do
    n1 = Mid(conso, i, 1)
    n2 = Mid(conso, i + 1, 1)
    n3 = Mid(conso, i + 2, 1)
    baso = Mid(conso, i, 3)
    i = i + 3
    If n1 & n2 & n3 = "000" Then
      If docso <> "" And lop = 3 And Len(conso) - i > 2 Then s123 = " tyû" Else s123 = ""
    Else
      If n1 = 0 Then
        If docso = "" Then s1 = "" Else s1 = " khoâng traêm"
      Else
        s1 = s09(n1) & " traê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öôøi" Else s2 = s09(n2) & " möôi"
      End If
      If n3 = 1 Then
        If n2 = 1 Or n2 = 0 Then s3 = " moät" Else s3 = " moát"
      ElseIf n3 = 5 And n2 <> 0 Then
        s3 = " laêm"
      Else
        s3 = s09(n3)
      End If
      If i > Len(conso) 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(conso) Then Exit Do
  Loop
  If docso = "" Then DocSoVni = "khoâng" Else DocSoVni = dau & Trim(docso)
Else
  DocSoVni = conso
End If
End Function
'==================================
Function DocSoAbc(conso) As String
s09 = Array("", " mét", " hai", " ba", " bèn", " n¨m", " s¸u", " b¶y", " t¸m", " chÝn")
lop3 = Array("", " triÖu", " ngh×n", " tû", " triÖu", " ngh×n", "")
If Trim(conso) = "" Then
  DocSoAbc = ""
ElseIf IsNumeric(conso) = True Then
  If conso < 0 Then dau = "©m " Else dau = ""
  conso = Application.WorksheetFunction.Round(Abs(conso), 0)
  conso = " " & conso
  conso = Replace(conso, ",", "", 1)
  vt = InStr(1, conso, "E")
  If vt > 0 Then
    sonhan = Val(Mid(conso, vt + 1))
    conso = Trim(Mid(conso, 2, vt - 2))
    conso = conso & String(sonhan - Len(conso) + 1, "0")
  End If
  conso = Trim(conso)
  sochuso = Len(conso) Mod 9
  If sochuso > 0 Then conso = String(9 - (sochuso Mod 12), "0") & conso
  docso = ""
  i = 1
  lop = 1
  Do
    n1 = Mid(conso, i, 1)
    n2 = Mid(conso, i + 1, 1)
    n3 = Mid(conso, i + 2, 1)
    baso = Mid(conso, i, 3)
    i = i + 3
    If n1 & n2 & n3 = "000" Then
      If docso <> "" And lop = 3 And Len(conso) - i > 2 Then s123 = " tû" Else s123 = ""
    Else
      If n1 = 0 Then
        If docso = "" Then s1 = "" Else s1 = " kh«ng tr¨m"
      Else
        s1 = s09(n1) & " tr¨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êi" Else s2 = s09(n2) & " m¬i"
      End If
      If n3 = 1 Then
        If n2 = 1 Or n2 = 0 Then s3 = " mét" Else s3 = " mèt"
      ElseIf n3 = 5 And n2 <> 0 Then
        s3 = " l¨m"
      Else
        s3 = s09(n3)
      End If
      If i > Len(conso) 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(conso) Then Exit Do
  Loop
  If docso = "" Then DocSoAbc = "kh«ng" Else DocSoAbc = dau & Trim(docso)
Else
  DocSoAbc = conso
End If
End Function
'===============================
Function DocSoUni(conso) 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(conso) = "" Then
  DocSoUni = ""
ElseIf IsNumeric(conso) = True Then
  If conso < 0 Then dau = ChrW(226) & "m " Else dau = ""
  conso = Application.WorksheetFunction.Round(Abs(conso), 0)
  conso = " " & conso
  conso = Replace(conso, ",", "", 1)
  vt = InStr(1, conso, "E")
  If vt > 0 Then
    sonhan = Val(Mid(conso, vt + 1))
    conso = Trim(Mid(conso, 2, vt - 2))
    conso = conso & String(sonhan - Len(conso) + 1, "0")
  End If
  conso = Trim(conso)
  sochuso = Len(conso) Mod 9
  If sochuso > 0 Then conso = String(9 - (sochuso Mod 12), "0") & conso
  docso = ""
  i = 1
  lop = 1
  Do
    n1 = Mid(conso, i, 1)
    n2 = Mid(conso, i + 1, 1)
    n3 = Mid(conso, i + 2, 1)
    baso = Mid(conso, i, 3)
    i = i + 3
    If n1 & n2 & n3 = "000" Then
      If docso <> "" And lop = 3 And Len(conso) - 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(conso) 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(conso) Then Exit Do
  Loop
  If docso = "" Then DocSoUni = "kh" & ChrW(244) & "ng" Else DocSoUni = dau & Trim(docso)
Else
  DocSoUni = conso
End If
End Function
Nếu không muốn cho nó đọc số là "bẩy" là cho nó đọc số là " bảy" thì phải làm sao?. Số tiền Việt Nam không chấp nhận chữ " bẩy" đâu bạn ơi.
 
Nếu không muốn cho nó đọc số là "bẩy" là cho nó đọc số là " bảy" thì phải làm sao?. Số tiền Việt Nam không chấp nhận chữ " bẩy" đâu bạn ơi.
Có thể tạm thời dùng cách sau:
PHP:
=SUBSTITUTE(docso(),"ẩy","ảy")
 
Web KT

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

Back
Top Bottom