Cách đọc đúng của đồng USD bằng tiếng việt: (1 người xem)

Liên hệ QC

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

Phuongle88ls

Thành viên mới
Tham gia
13/7/20
Bài viết
29
Được thích
11
- VD: 123,50 USD thì đọc cách nào dưới đây thì đúng
1. Một trăm hai mươi ba Đô la Mỹ và năm mươi Cent
2. Một trăm hai mươi ba Đô la Mỹ và năm Cent
- Mình có cài phần mềm acchelper để chuyển đổi số thành chữ. Nhưng khi mình tắt đi vào lại là p cài lại từ đầu. Mình đang dùng excel2010. Còn excel 2013 thì k bị
 
Nhưng khi mình cài phần mềm thì lại đọc ra cách thứ 2. Thì có cách nào chỉnh sửa đc k
Và Mình có cài phần mềm acchelper để chuyển đổi số thành chữ. Nhưng khi mình tắt đi vào lại là p cài lại từ đầu. Mình đang dùng excel2010. Còn excel 2013 thì k bị. Thì lỗi này sửa thế nào
 

File đính kèm

  • z1998475643178_5cde6b74b59e684ffbaa269fbdd76601.jpg
    z1998475643178_5cde6b74b59e684ffbaa269fbdd76601.jpg
    88.7 KB · Đọc: 55
- VD: 123,50 USD thì đọc cách nào dưới đây thì đúng
1. Một trăm hai mươi ba Đô la Mỹ và năm mươi Cent
2. Một trăm hai mươi ba Đô la Mỹ và năm Cent
- Mình có cài phần mềm acchelper để chuyển đổi số thành chữ. Nhưng khi mình tắt đi vào lại là p cài lại từ đầu. Mình đang dùng excel2010. Còn excel 2013 thì k bị
Theo quy định mới nhất của Cục Dự trữ Liên bang Hoa Kỳ, 1 USD sẽ bằng 100 Cent. Tương tự, 10 USD sẽ bằng 1.000 Cent100 USD sẽ bằng 10.000 Cent.
=> 1. đúng bạn nha !

"Mình có cài phần mềm acchelper để chuyển đổi số thành chữ. Nhưng khi mình tắt đi vào lại là p cài lại từ đầu. Mình đang dùng excel2010. Còn excel 2013 thì k bị" => mình chưa hiểu lắm.

à, bạn đừng viết tắt nha!
 
Nhưng khi mình cài phần mềm thì lại đọc ra cách thứ 2. Thì có cách nào chỉnh sửa đc k
Và Mình có cài phần mềm acchelper để chuyển đổi số thành chữ. Nhưng khi mình tắt đi vào lại là p cài lại từ đầu. Mình đang dùng excel2010. Còn excel 2013 thì k bị. Thì lỗi này sửa thế nào
Vậy thì "phần mềm" sai.
1. Phản hồi với tác giả để họ sửa.
2. Tìm cái khác thay thế.
 
Theo quy định mới nhất của Cục Dự trữ Liên bang Hoa Kỳ, 1 USD sẽ bằng 100 Cent. Tương tự, 10 USD sẽ bằng 1.000 Cent100 USD sẽ bằng 10.000 Cent.
=> 1. đúng bạn nha !

"Mình có cài phần mềm acchelper để chuyển đổi số thành chữ. Nhưng khi mình tắt đi vào lại là p cài lại từ đầu. Mình đang dùng excel2010. Còn excel 2013 thì k bị" => mình chưa hiểu lắm.

à, bạn đừng viết tắt nha!
Mình có cài phần mềm acchelper để chuyển đổi số thành chữ. Nhưng khi mình thoát bản excel đó ra rồi vào lại bản excel thì lại phải vào cài lại acchelper. Mình đang dùng excel 2010. Còn excel 2013 thì k bị.
 
Mình có cài phần mềm acchelper để chuyển đổi số thành chữ. Nhưng khi mình thoát bản excel đó ra rồi vào lại bản excel thì lại phải vào cài lại acchelper. Mình đang dùng excel 2010. Còn excel 2013 thì k bị.
Chắc là office 2010 máy đó bị lỗi gì á bạn.
Mà bên Excel 2013 bạn đọc bằng hàm gì? VND hay USD ?
 
- VD: 123,50 USD thì đọc cách nào dưới đây thì đúng
1. Một trăm hai mươi ba Đô la Mỹ và năm mươi Cent
2. Một trăm hai mươi ba Đô la Mỹ và năm Cent
- Mình có cài phần mềm acchelper để chuyển đổi số thành chữ. Nhưng khi mình tắt đi vào lại là p cài lại từ đầu. Mình đang dùng excel2010. Còn excel 2013 thì k bị
Góp ý cho bạn:
1/ Nếu bạn thấy phần mềm acchelper sử dụng khó quá và chưa phù hợp với nội dung bạn cần thì có thể nhờ các thành viên trên diễn đàn GPE trợ giúp viết code rồi lưu thành Add-in.
2/ Muốn GPE trợ giúp viết code thì nên đăng bài trong Box Lập trình với Excel.
 
Nhưng khi mình cài phần mềm thì lại đọc ra cách thứ 2. Thì có cách nào chỉnh sửa đc k
Và Mình có cài phần mềm acchelper để chuyển đổi số thành chữ. Nhưng khi mình tắt đi vào lại là p cài lại từ đầu. Mình đang dùng excel2010. Còn excel 2013 thì k bị. Thì lỗi này sửa thế nào
của mình sao nó đọc thành tiếng anh nhỉ
 
Chắc là office 2010 máy đó bị lỗi gì á bạn.
Mà bên Excel 2013 bạn đọc bằng hàm gì? VND hay USD ?
Mình đọc bằng hàm VND(A1,,"Đô la Mỹ","Cent")
Bài đã được tự động gộp:

Chờ một câu nói mà không thấy. Chẵng lẽ mặt dày tự gửi lên.

View attachment 242049
Hướng dẫn mình hàm đọc ra giá trị A2 với
 
Mã:
Function DocSoTien(ByVal SoTien As Double, Dong As String, Xu As String) As String
Dim Nguyen As Double, Le As Long
SoTien = Round(SoTien, 2)
Nguyen = Int(SoTien)
Le = (SoTien - Nguyen) * 100
DocSoTien = DocSo(Nguyen) & " " & Dong
If Le <> 0 Then
    DocSoTien = DocSoTien & " v" & ChrW(224) & " " & DocSo(Le) & " " & Xu
End If
Mid(DocSoTien, 1, 1) = UCase(Mid(DocSoTien, 1, 1))
End Function
Private Function DocSo(ByVal SoTien As Double) As String
Dim MyArray As Variant
Dim Str As String
Str = Format(Abs(SoTien), "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
    DocSo = UCase(Left(MyArray(0), 1)) & Trim(Mid(MyArray(0), 2)) & "."
    Exit Function
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
    DocSo = DocSo & 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
    DocSo = DocSo & MyArray(12)
End If
Next
DocSo = Trim(Replace(Replace(Replace(Replace(Replace(Replace(DocSo, 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 SoTien < 0 Then
DocSo = MyArray(29) & DocSo
End If
DocSo = Replace(Replace(DocSo & ".", ",.", "."), ".", "")
End Function
 
Mã:
Function DocSoTien(ByVal SoTien As Double, Dong As String, Xu As String) As String
Dim Nguyen As Double, Le As Long
SoTien = Round(SoTien, 2)
Nguyen = Int(SoTien)
Le = (SoTien - Nguyen) * 100
DocSoTien = DocSo(Nguyen) & " " & Dong
If Le <> 0 Then
    DocSoTien = DocSoTien & " v" & ChrW(224) & " " & DocSo(Le) & " " & Xu
End If
Mid(DocSoTien, 1, 1) = UCase(Mid(DocSoTien, 1, 1))
End Function
Private Function DocSo(ByVal SoTien As Double) As String
Dim MyArray As Variant
Dim Str As String
Str = Format(Abs(SoTien), "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
    DocSo = UCase(Left(MyArray(0), 1)) & Trim(Mid(MyArray(0), 2)) & "."
    Exit Function
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
    DocSo = DocSo & 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
    DocSo = DocSo & MyArray(12)
End If
Next
DocSo = Trim(Replace(Replace(Replace(Replace(Replace(Replace(DocSo, 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 SoTien < 0 Then
DocSo = MyArray(29) & DocSo
End If
DocSo = Replace(Replace(DocSo & ".", ",.", "."), ".", "")
End Function
Hi hi Em đã làm được và sửa theo ý mình 1 chút, Cảm ơn anh nhiều
 

File đính kèm

  • 1.JPG
    1.JPG
    44.4 KB · Đọc: 45
@huuthang_bd với hàm của bác =DocSoTien(123123456789000,"","") ra kết quả "Một trăm hai mươi ba ngàn, một trăm hai mươi ba tỷ, bốn trăm năm mươi sáu triệu, bảy trăm tám mươi chín ngàn ". Em nghĩ kết quả là "Một trăm hai mươi ba ngàn tỷ, một trăm hai mươi ba tỷ, bốn trăm năm mươi sáu triệu, bảy trăm tám mươi chín ngàn"
Hoặc =DocSoTien(10^12,"","") ra kết quả "Một ngàn, tỷ", em nghĩ nên là "Một ngàn tỷ".
 
@huuthang_bd với hàm của bác =DocSoTien(123123456789000,"","") ra kết quả "Một trăm hai mươi ba ngàn, một trăm hai mươi ba tỷ, bốn trăm năm mươi sáu triệu, bảy trăm tám mươi chín ngàn ". Em nghĩ kết quả là "Một trăm hai mươi ba ngàn tỷ, một trăm hai mươi ba tỷ, bốn trăm năm mươi sáu triệu, bảy trăm tám mươi chín ngàn"
Hoặc =DocSoTien(10^12,"","") ra kết quả "Một ngàn, tỷ", em nghĩ nên là "Một ngàn tỷ".
Đọc "Một ngàn, tỷ" thì đúng là sai, code bên dưới đã sửa lại. Còn trường hợp kia tôi nghĩ là đọc như code là đúng, cái này còn tùy từng người nữa.
Mã:
Function DocSoTien(ByVal SoTien As Double, Dong As String, Xu As String) As String
    Dim Nguyen As Double, Le As Long
    SoTien = Round(SoTien, 2)
    Nguyen = Int(SoTien)
    Le = (SoTien - Nguyen) * 100
    DocSoTien = DocSo(Nguyen) & " " & Dong
    If Le <> 0 Then
        DocSoTien = DocSoTien & " v" & ChrW(224) & " " & DocSo(Le) & " " & Xu
    End If
    Mid(DocSoTien, 1, 1) = UCase(Mid(DocSoTien, 1, 1))
End Function
Private Function DocSo(ByVal SoTien As Double) As String
    Dim MyArray As Variant
    Dim Str As String
    Str = Format(Abs(SoTien), "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
        DocSo = MyArray(0)
        Exit Function
    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
            DocSo = DocSo & 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
            DocSo = DocSo & MyArray(12)
        End If
    Next
    DocSo = Replace(DocSo, ", " & MyArray(12), " " & MyArray(12))
    DocSo = Trim(Replace(Replace(Replace(Replace(Replace(Replace(DocSo, 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 SoTien < 0 Then
        DocSo = MyArray(29) & DocSo
    End If
    DocSo = Replace(Replace(DocSo & ".", ",.", "."), ".", "")
End Function
 
Thắc mắc: lý do tại sao năm mươi Cent mà không phải là năm mươi Cents hoặc năm mươi Xu ?
 
- VD: 123,50 USD thì đọc cách nào dưới đây thì đúng
1. Một trăm hai mươi ba Đô la Mỹ và năm mươi Cent
2. Một trăm hai mươi ba Đô la Mỹ và năm Cent
- Mình có cài phần mềm acchelper để chuyển đổi số thành chữ. Nhưng khi mình tắt đi vào lại là p cài lại từ đầu. Mình đang dùng excel2010. Còn excel 2013 thì k bị

Bạn cài AccHelper 3.1 là tốt nhất hiện nay. Thư mục Acchelper không nên để nằm trong nhiều thư mục con, nên để ngắn gọn, ví dụ như để tại D:\AccHelper là ngắn gọn.
 
Lần chỉnh sửa cuối:
Vậy thì "phần mềm" sai.
1. Phản hồi với tác giả để họ sửa.
2. Tìm cái khác thay thế.
Mình dùng hàm VND: thì nó ra bẩy cent, còn dùng hàm USD: thì nó ra bẩy mươi cent.
Mình muốn dùng hàm usd rồi dùng hàm dịch cho chính xác. Mà hàm dịch đặt rồi mà k đc
Bài đã được tự động gộp:

Bạn cài AccHelper 3.1 là tốt nhất hiện nay. Thư mục Acchelper không nên để nằm trong nhiều thư mục con, nên để ngắn gọn, ví dụ như để tại D:\AccHelper là ngắn gọn.
Mình đang cài AccHelper 3.1 rồi. Nhưng k rõ làm sao mà cài cùng 1 phần mềm mà bên máy dùng excel 13 thì đc nhưng dùng excel 10 thì cứ tắt cái bản excel đấy đi. Mỗi lần vào excel la lại p cài lại
 

File đính kèm

  • z2001137081074_09e10ee29e7d287e24886ba232a5bc30.jpg
    z2001137081074_09e10ee29e7d287e24886ba232a5bc30.jpg
    82 KB · Đọc: 10
Đọc "Một ngàn, tỷ" thì đúng là sai, code bên dưới đã sửa lại. Còn trường hợp kia tôi nghĩ là đọc như code là đúng, cái này còn tùy từng người nữa.
Mã:
Function DocSoTien(ByVal SoTien As Double, Dong As String, Xu As String) As String
    Dim Nguyen As Double, Le As Long
    SoTien = Round(SoTien, 2)
    Nguyen = Int(SoTien)
    Le = (SoTien - Nguyen) * 100
    DocSoTien = DocSo(Nguyen) & " " & Dong
    If Le <> 0 Then
        DocSoTien = DocSoTien & " v" & ChrW(224) & " " & DocSo(Le) & " " & Xu
    End If
    Mid(DocSoTien, 1, 1) = UCase(Mid(DocSoTien, 1, 1))
End Function
Private Function DocSo(ByVal SoTien As Double) As String
    Dim MyArray As Variant
    Dim Str As String
    Str = Format(Abs(SoTien), "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
        DocSo = MyArray(0)
        Exit Function
    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
            DocSo = DocSo & 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
            DocSo = DocSo & MyArray(12)
        End If
    Next
    DocSo = Replace(DocSo, ", " & MyArray(12), " " & MyArray(12))
    DocSo = Trim(Replace(Replace(Replace(Replace(Replace(Replace(DocSo, 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 SoTien < 0 Then
        DocSo = MyArray(29) & DocSo
    End If
    DocSo = Replace(Replace(DocSo & ".", ",.", "."), ".", "")
End Function
Em thấy hàm này đọc số 12.05 hình như chưa đúng thì phải. Em thấy giải thuật rất hay và code viết rất gọn, Sẳn tiện cho em hỏi anh có viết hàm đọc số tiếng anh chia sẻ cho em tham khảo với ạ
 
Em thấy hàm này đọc số 12.05 hình như chưa đúng thì phải. Em thấy giải thuật rất hay và code viết rất gọn, Sẳn tiện cho em hỏi anh có viết hàm đọc số tiếng anh chia sẻ cho em tham khảo với ạ
Hình như là sao bạn. UDF đọc như thế nào, theo bạn thì đọc thế nào mới đúng.
 
Mới viết
Mã:
Function ReadNumber(Num As Double) As Variant
Dim Arr1 As Variant, Arr2 As Variant, Arr3 As Variant, sStr As String, lG As Long, lN As Long, i As Long, k As Long
Arr1 = Array(" zero", " one", " two", " three", " four", " five", " six", " seven", " eight", " nine", " ten", " eleven", " twelve", " thirteen", " fourteen", " fifteen", " sixteen", " seventeen", " eighteen", " nineteen")
Arr2 = Array("", "", " twenty", " thirty", " forty", " fifty", " sixty", " seventy", " eighty", " ninety")
Arr3 = Array("", " thousand,", " million,", " billion,", " trillion,")
If Abs(Num) >= 10 ^ 15 Then
    ReadNumber = CVErr(xlErrNum)
Else
    sStr = "00" & Replace(LTrim(Replace(Format(Abs(Num), "000000000000000"), "0", " ")), " ", "0")
    For i = Len(sStr) - 2 To 1 Step -3
        lG = CLng(Mid(sStr, i, 3))
        If lG > 0 Then
            ReadNumber = Arr3(k) & ReadNumber
            lN = lG Mod 100
            If lN >= 20 Then
                ReadNumber = Replace(Arr2(lN \ 10) & Arr1(lN Mod 10), Arr1(0), "") & ReadNumber
            ElseIf lN > 0 Then
                ReadNumber = Arr1(lN) & ReadNumber
            End If
            If i > 2 Then ReadNumber = Arr1(lG \ 100) & " hundred" & IIf(lN > 0, " and", "") & ReadNumber
        End If
        k = k + 1
    Next
    ReadNumber = Trim(ReadNumber)
    ReadNumber = Replace(ReadNumber & ".", ",.", ".")
    If Num < 0 Then ReadNumber = "Negative " & ReadNumber
    Mid(ReadNumber, 1, 1) = UCase(Mid(ReadNumber, 1, 1))
End If
End Function
 
Mới viết
Mã:
Function ReadNumber(Num As Double) As Variant
Dim Arr1 As Variant, Arr2 As Variant, Arr3 As Variant, sStr As String, lG As Long, lN As Long, i As Long, k As Long
Arr1 = Array(" zero", " one", " two", " three", " four", " five", " six", " seven", " eight", " nine", " ten", " eleven", " twelve", " thirteen", " fourteen", " fifteen", " sixteen", " seventeen", " eighteen", " nineteen")
Arr2 = Array("", "", " twenty", " thirty", " forty", " fifty", " sixty", " seventy", " eighty", " ninety")
Arr3 = Array("", " thousand,", " million,", " billion,", " trillion,")
If Abs(Num) >= 10 ^ 15 Then
    ReadNumber = CVErr(xlErrNum)
Else
    sStr = "00" & Replace(LTrim(Replace(Format(Abs(Num), "000000000000000"), "0", " ")), " ", "0")
    For i = Len(sStr) - 2 To 1 Step -3
        lG = CLng(Mid(sStr, i, 3))
        If lG > 0 Then
            ReadNumber = Arr3(k) & ReadNumber
            lN = lG Mod 100
            If lN >= 20 Then
                ReadNumber = Replace(Arr2(lN \ 10) & Arr1(lN Mod 10), Arr1(0), "") & ReadNumber
            ElseIf lN > 0 Then
                ReadNumber = Arr1(lN) & ReadNumber
            End If
            If i > 2 Then ReadNumber = Arr1(lG \ 100) & " hundred" & IIf(lN > 0, " and", "") & ReadNumber
        End If
        k = k + 1
    Next
    ReadNumber = Trim(ReadNumber)
    ReadNumber = Replace(ReadNumber & ".", ",.", ".")
    If Num < 0 Then ReadNumber = "Negative " & ReadNumber
    Mid(ReadNumber, 1, 1) = UCase(Mid(ReadNumber, 1, 1))
End If
End Function
Em rất thích cách viết với giải thuật này của anh, nhìn nó gọn, còn các cách viết ở những bài em đã tham khảo thì thấy nó dài quá. Nhưng sẳn anh update cho nó đọc số lẻ (2 hoặc 3 chữ số lẻ thôi) luôn với.
 
Bạn cài AccHelper 3.1 là tốt nhất hiện nay. Thư mục Acchelper không nên để nằm trong nhiều thư mục con, nên để ngắn gọn, ví dụ như để tại D:\AccHelper là ngắn gọn.
Cái này chạy trên offcie 2019 bản 64b em thấy bị lỗi
Không chuyển "ngàn" thành "nghìn",
"lẻ" thành "linh" được.
 
Cái này chạy trên offcie 2019 bản 64b em thấy bị lỗi
Không chuyển "ngàn" thành "nghìn",
"lẻ" thành "linh" được.

Em xem trong thư mục ACCHELPER có file .INI, mở nó bằng Notepad và sửa sau đó lưu, đóng, mở lại Excel là được nhé.
 
Thắc mắc chút tại sao rõ ràng con số không có lẻ thập phân sao nó đọc ra chín bốn xu?
1608107995319.png
mà con số khác thì nó đọc đúng:
1608108134825.png
 
Thắc mắc chút tại sao rõ ràng con số không có lẻ thập phân sao nó đọc ra chín bốn xu?
View attachment 251326
mà con số khác thì nó đọc đúng:
View attachment 251327
Tại vì cả hai con số đều dài 15 chữ số. Chữ số kể từ 16 trở đi không bảo đảm.

(đoán đại vậy thôi chứ ai biết cái hàm này nó làm việc chính xác đợc đến bao nhiêu chữ số)
 
Tại vì cả hai con số đều dài 15 chữ số. Chữ số kể từ 16 trở đi không bảo đảm.

(đoán đại vậy thôi chứ ai biết cái hàm này nó làm việc chính xác đợc đến bao nhiêu chữ số)
Cũng kỳ là nó lấy 94 xu ấy ở đâu để đọc? Và chỉ thay 5 trăm ngàn tỷ đó thành 6 trăm ngàn tỷ thì không dư 94 xu nữa.
 
Cũng kỳ là nó lấy 94 xu ấy ở đâu để đọc? Và chỉ thay 5 trăm ngàn tỷ đó thành 6 trăm ngàn tỷ thì không dư 94 xu nữa.
Đã nói đoán đại mờ. Trên nguyên tắc thì chỉ cần biết là các con số sau 15 chữ số không đáng tin cậy, vậy thì nó có là 1 hay 99 đều có thể coi như 0.
Việc có thể đi vòng qua giới hạn này bằng cách đưa một chuỗi (string) dài ngoẵng vào thì tôi không biết - có thử đâu mà biết.
 
Anh ơi,

Cho e xin cách đọc tiếng anh có thêm phần thập phân (số lẻ) với.
Vd: 125.20 USD đọc là One hundred twenty five US dollars and twenty cents only.
Đã có số thập phân thì làm gì có only. Only chỉ dùng cho số tiền nguyên, tựa như chữ "chẵn" của tiếng Việt.
 
Đã có số thập phân thì làm gì có only. Only chỉ dùng cho số tiền nguyên, tựa như chữ "chẵn" của tiếng Việt.
Có ba cách đọc số không có xu:
- ... dollars only
- ... dollars even
- ... dollars and zero cents

Ở trên, vì số xu là bội của mười (20) cho nên đôi khi cũng có người dùng 'only' để kết nó không có xu lẻ hàng đơn vị.
Cách nói này còn nằm trong vòng tranh cãi - có người cho đúng có người cho sai.
 
Có ba cách đọc số không có xu:
- ... dollars only
- ... dollars even
- ... dollars and zero cents

Ở trên, vì số xu là bội của mười (20) cho nên đôi khi cũng có người dùng 'only' để kết nó không có xu lẻ hàng đơn vị.
Cách nói này còn nằm trong vòng tranh cãi - có người cho đúng có người cho sai.
Các anh chị em vui lòng giúp mình với.
Tha thiết mong mọi người giúp nhé!
Đa tạ!
Bài đã được tự động gộp:

1,800.86 vd số này, mình cần đọc là One thousand eight hundred US dollars and eighty six cents. Có only hay ko cũng được.
 

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

Back
Top Bottom