Hàm đọc số thành chữ

Chia sẻ bởi:hrspring.tides
★★★★★
Quảng cáo

Công thức chuyển số thành chữ sử dụng được trên Excel 2007 trở lên.
Tiếng Việt:

=IF(ABS(A1)>=10^15;"###";IF(A1<0;"Âm ";MID("KMHBBNSBTC";LEFT(ROUND(A1;0))+1;1))&MID(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(RIGHT(TEXT(A1;SUBSTITUTE("0*0=0/0*0;0*0=0/0*0";0;"0-0+0"));LEN(ROUND(ABS(A1);0))*2-1);"0-0+0*";"");"0-0+0/";"");"0-0+0";"");"0+0";"");"0+";" lẻ");"+0";"+");"+5";"+ lăm");"1+";" mười");"+1";"+ mốt");0;" không");1;" một");2;" hai");3;" ba");4;" bốn");5;" năm");6;" sáu");7;" bảy");8;" tám");9;" chín");"+";" mươi");"-";" trăm");"*";" ngàn,");"/";" triệu,");",=";"=");"=";" tỷ,")&"  ";",  ";""));2-(A1<0);999))

Tiếng Anh:

=IF(ABS(A1)>=10^15;"###";IF(A1<0;"Negative ";MID("ZOTTFFSSENTETTFFSSEN";LEFT(ROUND(A1;0);IFERROR(IF(LEFT(ROUND(A1;0))*MOD(INT(LOG10(ROUND(ABS(A1);0)));3)=1;2;1);1))+1;1))&MID(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(RIGHT(TEXT(A1;SUBSTITUTE("0\0=0/0*0;0\0=0/0*0";0;"0-0+0"));LEN(ROUND(ABS(A1);0))*2-1);"0-0+0=";"");"0-0+0/";"");"*0-";"* and");"0-0+0*";"");"0-";"");"0+";"");"1+0";" ten");"1+1";" eleven");"1+2";" twelve");"1+3";" thirteen");"1+4";"4teen");"1+5";" fifteen");"1+6";"6teen");"1+7";"7teen");"1+8";"8een");"1+9";"9teen");"2+";" twenty:");"3+";" thirty:");"4+";" forty:");"5+";" fifty:");"8+";"8y:");"+";"ty:");"y:0";"y");0;" zero");1;" one");2;" two");3;" three");4;" four");5;" five");6;" six");7;" seven");8;" eight");9;" nine");"-";" hundred and");"*";" thousand,");"/";" million,");"=";" billion,");"";" trillion,");": ";"-");" and zero";"");", a";" a")&"  ";",  ";""));2-(A1<0);999))

Lưu ý: Các công thức trên chỉ chuyển được số trong phạm vi từ -10^15+1 đến 10^15-1, ngoài phạm vi này công thức sẽ trả về "###"
Công thức chuyển số thành chữ tiếng Việt và tiếng Anh sử dụng trên Excel 365 và Goolge Sheet, không giới hạn độ lớn của số cần đọc (số lớn nhập vào dạng chuỗi).
Tiếng Việt:

=LET(so;A1;d;SIGN(so)+2;n;"00"&IF(ISTEXT(so);MID(so;1+(d=1);99);TEXT(so;"0;0"));l;LEN(n);g;INT(l/3);r;SUBSTITUTE(TEXTJOIN(",";1;MAP(SEQUENCE(g;1;g;-1);LAMBDA(k;LET(s;LEFT(n;l-k*3+3);a;{"không";"một";"hai";"ba";"bốn";"năm";"sáu";"bảy";"tám";"chín"};b;MIN(k;MOD(k-2;3)+2);x;RIGHT(s;3)*1;y;MOD(x;100);z;MOD(y;10);IF(x>0;IF(LEN(s)>4;" "&INDEX(a;INT(x/100)+1)&" trăm"&IF(AND(y<10;z>0);" lẻ";"");"")&IF(y>=20;" "&INDEX(a;INT(y/10)+1)&" mươi";IF(y>=10;" mười";""))&IF(z>0;LET(t;(y>11)*((z=1)+(z=5)*2)+1;" "&CHOOSE(t;INDEX(a;z+1);"mốt";"lăm"));"")&CHOOSE(b;"";" ngàn";" triệu";" tỷ");IF(b=4;" tỷ";""))))));", tỷ";" tỷ");CHOOSE(d;"Âm"&r;"Không";UPPER(MID(r;2;1))&MID(r;3;999)))

Tiếng Anh:

=LET(so;A1;d;SIGN(so)+2;n;"00"&IF(ISTEXT(so);MID(so;1+(d=1);99);TEXT(so;"0;0"));l;LEN(n);g;INT(l/3);r;SUBSTITUTE(TEXTJOIN(",";1;MAP(SEQUENCE(g;1;g;-1);LAMBDA(k;LET(s;LEFT(n;l-k*3+3);a;{"zero";"one";"two";"three";"four";"five";"six";"seven";"eight";"nine";"ten";"eleven";"twelve";"thirteen";"fourteen";"fifteen";"sixteen";"seventeen";"eighteen";"nineteen"};b;{"";"twenty";"thirty";"forty";"fifty";"sixty";"seventy";"eighty";"ninety"};x;RIGHT(s;3)*1;y;MOD(x;100);z;MOD(y;10);IF(x>0;IF(LEN(s)>4;IF(x<100;IF(k=1;" and";"");" "&INDEX(a;INT(x/100)+1)&" hundred"&IF(y>0;" and";""));"")&IF(y>=20;" "&INDEX(b;INT(y/10))&IF(z>0;"-"&INDEX(a;z+1);"");IF(y>0;" "&INDEX(a;y+1);""))&CHOOSE(k;"";" thousand"; " million"; " billion"; " trillion";" quadrillion";" quintillion";" sextillion";" septillion";" octillion");"")))));", and";" and");CHOOSE(d;"Negative"&r;"Zero";UPPER(MID(r;2;1))&MID(r;3;999)))


-460.101.895.031
Âm bốn trăm sáu mươi tỷ, một trăm lẻ một triệu, tám trăm chín mươi lăm ngàn, không trăm ba mươi mốt
Negative four hundred and sixty billion, one hundred and one million, eight hundred and ninety-five thousand and thirty-one
Dùng Add-in "VnTools"
🔹 Mô tả:

  • Hỗ trợ hàm =VND(số) chuyển số thành chữ
  • Ví dụ: =VND(1250000) ➝ "Một triệu hai trăm năm mươi ngàn đồng chẵn"

🔹 Cài đặt:

  • Tải VnTools tại:

    https://drive.usercontent.google.com/download?id=1mSxeTYtA0qgPBS7gG_UsGT4CGhDk_YZc&export=download&authuser=0

  • Mở Excel → File → Options → Add-ins → Excel Add-ins → Browse → chọn file VnTools-Excel.xlam
  • Dùng hàm
    =VND(A1)

🔹 Ưu điểm:

  • Dùng đơn giản như công thức
  • Hỗ trợ tiếng Việt
  • Không cần viết lại công thức phức tạp

Dùng VBA Tùy chỉnh (tương thích mọi Excel)
🔹 Bước 1: Nhấn Alt + F11 để mở Visual Basic Editor
🔹 Bước 2: Thêm Module mới, dán code sau:

Function DocSo(ByVal SoTien As Double) As String
    Dim ChuSo() As String
    Dim Hang() As String
    Dim i As Integer, j As Integer, donvi As Integer
    Dim KetQua As String, S As String, Tien As String
    Dim Ngan As Integer, Trieu As Integer, Ty As Integer

ChuSo = Split("không,một,hai,ba,bốn,năm,sáu,bảy,tám,chín", ",")
    Hang = Split(""," nghìn"," triệu"," tỷ"," nghìn tỷ"," triệu tỷ")

If SoTien = 0 Then
        DocSo = "Không đồng"
        Exit Function
    End If

If SoTien < 0 Then
        Tien = "Âm "
        SoTien = -SoTien
    End If

S = Format(Int(SoTien), "000000000000000")
    j = 1
    For i = 1 To Len(S) Step 3
        donvi = Val(Mid(S, i, 3))
        If donvi > 0 Then
            KetQua = KetQua & Doc3ChuSo(donvi, ChuSo) & Hang((Len(S) - i)  3) & " "
        End If
    Next i

DocSo = Application.WorksheetFunction.Proper(Tien & Trim(KetQua) & "đồng chẵn")
End Function

Private Function Doc3ChuSo(ByVal n As Integer, ChuSo() As String) As String
    Dim Tram As Integer, Chuc As Integer, DonVi As Integer
    Dim KetQua As String

Tram = n  100
    Chuc = (n  10) Mod 10
    DonVi = n Mod 10

If Tram > 0 Then KetQua = ChuSo(Tram) & " trăm "
    If Chuc > 1 Then
        KetQua = KetQua & ChuSo(Chuc) & " mươi "
        If DonVi = 1 Then
            KetQua = KetQua & "mốt"
        ElseIf DonVi = 5 Then
            KetQua = KetQua & "lăm"
        ElseIf DonVi > 0 Then
            KetQua = KetQua & ChuSo(DonVi)
        End If
    ElseIf Chuc = 1 Then
        KetQua = KetQua & "mười "
        If DonVi = 5 Then
            KetQua = KetQua & "lăm"
        ElseIf DonVi > 0 Then
            KetQua = KetQua & ChuSo(DonVi)
        End If
    ElseIf DonVi > 0 Then
        KetQua = KetQua & "lẻ " & ChuSo(DonVi)
    End If

Doc3ChuSo = KetQua
End Function

Bước 3: Trong Excel, dùng hàm:

=DocSo(A1)

Kết quả:

"Một triệu hai trăm nghìn đồng chẵn" nếu A1 = 1,200,000

Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Khóa học SprinGO phù hợp

Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ

Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...

Xem khóa học
★★★★★ 5 ★ 1 👤 0 ▥ 0
Quảng cáo

Bạn nên đọc

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm