Chia sẻ: Công thức chuyển số thành chữ cho Excel 2007 (1 người xem)

Liên hệ QC

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

huuthang_bd

Chuyên gia GPE
Tham gia
10/9/08
Bài viết
8,933
Được thích
11,357
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Thợ đụng
Như đã hứa, hôm nay tôi chia sẻ 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:
Mã:
=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:
Mã:
=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ề "###"
Bạn @cantl vào nhận hàng nhé.
--
Nhân tiện tôi chia sẻ luôn 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:
Mã:
=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:
Mã:
=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
 

File đính kèm

Lần chỉnh sửa cuối:
Như đã hứa, hôm nay tôi chia sẻ công thức chuyển số thành chữ sử dụng được trên Excel 2007 trở lên.
Mã:
=IF(ABS(A1)>=10^15;"###";IF(A1<0;"Âm ";MID("KMHBBNSBTC";LEFT(ABS(A1))+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(RIGHT(TEXT(A1;SUBSTITUTE("0;0";0;"0\-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))
Lưu ý: 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ề "###"
Bạn @cantl vào nhận hàng nhé.
--
Nhân tiện tôi chia sẻ luôn 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:
Mã:
=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:
Mã:
=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.000.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
Vinh dự quá bác ạ!!!
Em đã đối chiếu với hàm VBA của bác, giống tuyệt đối. :D :D :D
 

File đính kèm

  • 1681295784197.png
    1681295784197.png
    55.2 KB · Đọc: 102
Lần chỉnh sửa cuối:
Quá đỉnh luôn anh ạ, em chạy thử công thức dành cho Excel 2007 trở lên, dữ liệu hơn 1 triệu dòng chạy công thức của anh sổ xuống mất khoảng 5 giây, tốc độ quá tuyệt vời. :clap:
 
Có nhiều bạn sẽ hỏi sao em chép đúng biểu thức ở trên mà báo lỗi hoài.
Vì là công thức với dấu tách đối số có thể là dấu phẩy hoặc dấu chấm phẩy. Dấu tách mảng là dấu \ hoặc dấu ;. Mà Excel của bạn đang là dấu ngược lại thì chắc chắn lỗi.

Để sao chép công thức dài như công thức trong bài viết này một cách nhanh nhất các bạn có thể tham khảo Add-in dưới đây:
Ví dụ chỉ cần nhấn nút [sao chép] phần công thức ở trên và gõ vào ô Excel:

Dán công thức và chuẩn hóa:
=fx_paste()

Chuẩn hóa công thức cho Google Sheets:
=Fx_Copy_forGoolgeSheet()

Đơn giản vậy thôi.



Các bạn có thể tham khảo thêm hàm Đọc số trong chuỗi chứa số được viết bằng VBA.

Ví dụ với chuỗi : "Vào ngày 12/04/2023 tôi được tin báo trúng số Vietlott với giải thưởng chỉ có 44,037,000,000 VNĐ, nhưng may mắn họ báo nhầm người"
Có thể đọc số giữ chuỗi hoặc chỉ đọc số.


 
Lần chỉnh sửa cuối:
Công thức ngon. Tuy nhiên muốn thay đổi ô tham chiếu thì chịu khó dùng Ctrl+H
 
Công thức ngon. Tuy nhiên muốn thay đổi ô tham chiếu thì chịu khó dùng Ctrl+H
Cách của em hơi khác tí. Em sẽ:
- Dán công thức vào ô bất kỳ khác A1 trước.
- Ctrl+x ô A1 dán vào vị trí bản thân cho là hoàn hảo nào đấy.
- Nhập số vào ô hoàn hảo ấy.
 
Cách của em hơi khác tí. Em sẽ:
- Dán công thức vào ô bất kỳ khác A1 trước.
- Ctrl+x ô A1 dán vào vị trí bản thân cho là hoàn hảo nào đấy.
- Nhập số vào ô hoàn hảo ấy.
Cách của bạn chuẩn đấy. Nhưng không phải ai cũng biết. :D
 
Cách của bạn chuẩn đấy. Nhưng không phải ai cũng biết. :D
Nhờ bác góp ý hộ. Cơ bản công thức này chia số cần đọc theo hàng trăm, hàng chục và đơn vị, đọc từng bộ 3 số rồi kết hợp với "hàng" (ngàn, triệu, tỷ).
Mã:
=LET(so,SUBSTITUTE(IF(ISTEXT(A2),A2,TEXT(A2,"0")),"-",""),
    doc_so,TRIM(IF(LEFT(A2)="-","Âm ","")&TEXTJOIN(", ",,
        LET(l,SEQUENCE(ROUNDUP(LEN(so)/3,0),,1,3),m,MOD(2*LEN(so),3),
            tr,--MID(so,l-m,1),ch,--MID(so,l-m+1,1),dv,--MID(so,l-m+2,1),
            chuso,{"không ","một ","hai ","ba ","bốn ","năm ","sáu ","bảy ","tám ","chín "},
            doc_tr,IFERROR(IF(tr+ch+dv>0,INDEX(chuso,tr+1)&"trăm ",""),""),
            doc_ch,IFERROR(IF(ch+dv>0,IF(ch=0,"lẻ ",IF(ch=1,"mười ",INDEX(chuso,ch+1)&"mươi ")),""),""),
            doc_dv,IF(dv>0,IF(dv=1,IF(IFERROR(ch,0)>1,"mốt ","một "),IF(IFERROR(dv,0)=5,IF(IFERROR(ch,0)=0,"năm ","lăm "),INDEX(chuso,dv+1))),""),
            doc_hang,IF(IFERROR(tr,0)+IFERROR(ch,0)+dv>0,INDEX({"","ngàn","triệu"},MOD((MAX(l)-l)/3,3)+1),""),
            doc_ty,IF(MOD(MAX(l)-l,9)=0,IF(l=MAX(l),"","tỷ"),""),
        doc_tr&doc_ch&doc_dv&doc_hang&doc_ty))),
SUBSTITUTE(SUBSTITUTE(doc_so,LEFT(doc_so),UPPER(LEFT(doc_so)),1),", tỷ"," tỷ"))&" đồng."
 
Ế ẩm quá phải vào thớt hót của người khác rao =)))
Người ta úp file lên rồi thì cứ thế chép lấy công thức trong file mà dùng, dấu phân cách là gì thì mặc kệ nhà máy tính, nhà phần mềm nó tự biết mà làm.
Chép công thức ra bài là để dành người có khả năng đọc được nó.
 
Trước mắt tôi thấy công thức của bạn không hoạt động được trên Google Sheet. Những hàm bạn dùng Google Sheet đều có mà công thức không sử dụng được trên Google Sheet là một điểm trừ rồi.
Bài đã được tự động gộp:

Ế ẩm quá phải vào thớt hót của người khác rao =)))
Người ta úp file lên rồi thì cứ thế chép lấy công thức trong file mà dùng, dấu phân cách là gì thì mặc kệ nhà máy tính, nhà phần mềm nó tự biết mà làm.
Chép công thức ra bài là để dành người có khả năng đọc được nó.
Cùng suy nghĩ luôn.
Nhưng khách đến nhà không lẽ... :D
 
Công thức quá đỉnh ạ. Cảm ơn sự kỳ công và chia sẻ tuyệt vời của bác ạ. Lại có thêm một hàm bỏ túi cho những file cần "di chuyển" nhiều rồi ạ.
 
Trước mắt tôi thấy công thức của bạn không hoạt động được trên Google Sheet. Những hàm bạn dùng Google Sheet đều có mà công thức không sử dụng được trên Google Sheet là một điểm trừ
Cảm ơn bác. Em không xài Google Sheet nên không biết viết sao cho nó hoạt động trên đó. Để từ từ nghiên cứu sau.
Em viết công thức trên để tự học là chính. Bữa có đọc trên trang chủ về mấy hàm kết hợp với LET mà nó viết nhức đầu quá nên thôi. Bởi vậy nên hàm Map và Lambda em đâu có xài được.
 
Cảm ơn bác. Em không xài Google Sheet nên không biết viết sao cho nó hoạt động trên đó. Để từ từ nghiên cứu sau.
Em viết công thức trên để tự học là chính. Bữa có đọc trên trang chủ về mấy hàm kết hợp với LET mà nó viết nhức đầu quá nên thôi. Bởi vậy nên hàm Map và Lambda em đâu có xài được.
Thì trước giờ tôi cũng có biết LET với LAMBDA là gì đâu, tôi dùng Excel 2007 từ xưa đến giờ. Tại thấy cái bạn giỏi excel kia hô to quá nên tôi mới dùng excel online làm thử xem thế nào thôi.
 
Thì trước giờ tôi cũng có biết LET với LAMBDA là gì đâu, tôi dùng Excel 2007 từ xưa đến giờ. Tại thấy cái bạn giỏi excel kia hô to quá nên tôi mới dùng excel online làm thử xem thế nào thôi.
Cái máy cùi bắp ở nhà, bấm vào step in coi từng bước của công thức như thế nào thì đến chỗ hàm MAP đơ máy tự thoát Excel luôn.
 
Cái máy cùi bắp ở nhà, bấm vào step in coi từng bước của công thức như thế nào thì đến chỗ hàm MAP đơ máy tự thoát Excel luôn.
1681347607968.png
Tôi thấy Microsoft mô tả rất dễ hiểu mà. Nếu muốn hiểu nguyên lý thì bạn nên thử với công thức đơn giản.
MAP({1;2;3};LAMBDA(x;x*x)) = {1;4;9}
MAP({1;2;3};LAMBDA(x;x*2)) = {2;4;6}
MAP({1;2;3};LAMBDA(x;
f(x))) = {f(1);f(2);f(3)}
 
Như đã hứa, hôm nay mình chia sẻ công thức chuyển số thành chữ sử dụng được trên Excel 2007 trở lên.
_=";"_");"0";" không phải");"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");"+";" tút");"-";" Xe điện");"*";" ngàn,");"/";" triệu,");",=";"=");"=";" Tỷ,")&" ";", ";""));2-(A1<0);999))[/CODE]
Lưu ý: Công thức chuyển đổi chỉ được đánh số trong phạm vi từ -10^15+1 đến 10^15-1, ngoài phạm vi công thức này sẽ trả về "###"
Bạn @cantl vào nhận hàng nhé.
--
Nhân tiện ích tôi chia sẻ luôn 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 định dạng chuỗi).
Tiếng Việt:
")&CHOOSE(b;"";" điểm";" triệu";" tỷ");IF(b=4;" tỷ";""))))));", tỷ";" Tỷ");CHOOSE(d;"Âm"&r;"Không";UPPER(MID(r;2;1))&MID(r;3;999)))[/CODE]
Tiếng Anh:
Và";"");" "&INDEX(a;INT(x/100)+1)&" Trăm"&IF(y>0;" và";""));"")&IF(y>=20;" "&INDEX(b;INT (y/10))&IF(z>0;"-"&INDEX(a;z+1);"");IF(y>0;" "&INDEX(a;y+1);""))&CHOOSE (k;"";"nghìn"; "triệu"; "tỷ"; "nghìn Tỷ";"nghì Tỷ";"nghìn Tỷ";"sextillion";"septillion";"octillion");"")) ))) ;", Và";" and");CHOOSE(d;"Negative"&r;"Zero";UPPER(MID(r;2;1))&MID(r;3;999)))[/CODE] tỉ lệ";" Nghìn Tỷ Tỷ ";" Nghìn tỷ tỷ";" octillion");""))))); ", và";" and");CHOOSE(d;"Negative"&r;"Zero";UPPER(MID(r;2;1))&MID(r;3;999)))[/CODE] tỉ lệ ";" Nghìn tỷ tỷ";" Nghìn tỷ tỷ";" octillion");"")))));", và";" and");CHOOSE(d;"Negative"&r;"Zero";UPPER(MID(r;2;1))&MID(r;3;999)))[/CODE]
--
-460.000.101.895.031
Âm ba trăm sáu mươi tỷ, một trăm lẻ một triệu, tám trăm chín mươi vạn, không trăm ba mươi mốt
Â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 tàn ác ma quỷ
thêm chữ đồng đằng sau thì làm thế nào vậy bác
 
Công thức hay quá , cảm ơn anh Thắng đã chia sẻ.
 
Lần chỉnh sửa cuối:
Như đã hứa, hôm nay tôi chia sẻ công thức chuyển số thành chữ sử dụng được trên Excel 2007 trở lên.
Mã:
=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(SUBSTITUTE(RIGHT(TEXT(A1;SUBSTITUTE("0;0";0;"0\-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))
Lưu ý: 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ề "###"
Bạn @cantl vào nhận hàng nhé.
--
[/CODE]
--
-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

Công thức tuyệt vời quá, nhưng bác cho em hỏi bác có thêm công thức chuyển qua tiếng Anh trên Excel 2007 trở lên nữa ko thì cho em xin. Như ví dụ :
50000VND chuyển qua tiếng Anh là "Fifty thousand dong" và em muốn bỏ dấu phẩy giữa các đơn vị triệu, ngàn, trăm, ... thì edit công thức lại như thế nào vậy ? Mong bác giải đáp

Cám ơn bác
 
Thì trước giờ tôi cũng có biết LET với LAMBDA là gì đâu, tôi dùng Excel 2007 từ xưa đến giờ. Tại thấy cái bạn giỏi excel kia hô to quá nên tôi mới dùng excel online làm thử xem thế nào thôi.
Hình như bỏ chữ giỏi đi rồi bác
 
Công thức tuyệt vời quá, nhưng bác cho em hỏi bác có thêm công thức chuyển qua tiếng Anh trên Excel 2007 trở lên nữa ko thì cho em xin. Như ví dụ :
50000VND chuyển qua tiếng Anh là "Fifty thousand dong" và em muốn bỏ dấu phẩy giữa các đơn vị triệu, ngàn, trăm, ... thì edit công thức lại như thế nào vậy ? Mong bác giải đáp

Cám ơn bác
=SUBSTITUTE("dấu, phẩy, này, phải, không";",";"")
 

File đính kèm

  • 1681447404655.png
    1681447404655.png
    94.4 KB · Đọc: 32
Em xin CT chỉ đọc số thôi với ạ, Cảm ơn anh !
 
Như đã hứa, hôm nay tôi chia sẻ 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:
Mã:
=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(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:
Mã:
=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ề "###"
Bạn @cantl vào nhận hàng nhé.
--
Nhân tiện tôi chia sẻ luôn 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:
Mã:
=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:
Mã:
=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
Cảm ơn anh đã chia sẻ. Đúng hàm em cần đi tìm bao lâu nay. file mình chạy đổi số chữ dùng VBA sang máy khác họ không mở macro toàn bị lỗi
 
@huuthang_bd : Tôi copy công thức đọc số thành chữ từ file có định dạng .xlsx sang file có định dạng .xls thì báo lỗi như hình dưới. Thì sửa thế nào vậy bạn?
jyusda.PNG

Excel 2010 32bit.
 
Mã:
=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(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))

Cám ơn Huuthang_bd, công thức quá tuyệt vời.
Mình đọc công thức nhưng có chỗ tô mầu này mình chưa hiểu lắm, nhờ bạn giải thích thêm chỗ này nhé!1733924180413.png
 
Cám ơn Huuthang_bd, công thức quá tuyệt vời.
Mình đọc công thức nhưng có chỗ tô mầu này mình chưa hiểu lắm, nhờ bạn giải thích thêm chỗ này nhé!View attachment 306234
Đúng là bị thừa hàm SUBSTITUTE đó rồi bạn. Quá trình xây dựng công thức này tôi đã thử nghiệm nhiều trường hợp, khi tinh gọn lại bị sót nên thừa đoạn này.
Tuy không ảnh hưởng kết quả nhưng bỏ đoạn thừa này sẽ giúp công thức ngắn hơn. Cảm ơn bạn vì phát hiện này.
 
Cái chỗ hàm TEXT này
TEXT(A1,SUBSTITUTE("0\*0\=0\/0\*0;0\*0\=0\/0\*0",0,"0\-0\+0"))
mình thay bằng
TEXT(ABS(A1),SUBSTITUTE("0\*0\=0\/0\*0",0,"0\-0\+0"))
thì độ dài của công thức (xét ký tự) và kết quả nó trả về ngắn hơn 1 chút, tiện cho việc kiểm tra (vì mình phải dò từng công thức một thì mới thấy được sự tư duy đỉnh cao của bạn), nhưng mình chưa biết nó ảnh hưởng tới tốc độ sẽ như thế nào.
 
Cái chỗ hàm TEXT này

mình thay bằng

thì độ dài của công thức (xét ký tự) và kết quả nó trả về ngắn hơn 1 chút, tiện cho việc kiểm tra (vì mình phải dò từng công thức một thì mới thấy được sự tư duy đỉnh cao của bạn), nhưng mình chưa biết nó ảnh hưởng tới tốc độ sẽ như thế nào.
Thêm một hàm ABS chắc không ảnh hưởng gì nhiều đến tốc độ. Công thức có ngắn hơn một chút nhưng tôi chưa hiểu bạn nói kết quả trả về ngắn hơn là như thế nào.
 
Thêm một hàm ABS chắc không ảnh hưởng gì nhiều đến tốc độ. Công thức có ngắn hơn một chút nhưng tôi chưa hiểu bạn nói kết quả trả về ngắn hơn là như thế nào.
Ý mình là chỉ ngắn hơn chỗ kết quả của TEXT thôi bạn ạ.
- Công thức lúc đầu trả về: "0\-0\+0\*0\-0\+0\=0\-0\+0\/0\-0\+0\*0\-0\+0;0\-0\+0\*0\-0\+0\=0\-0\+0\/0\-0\+0\*0\-0\+0"
- Công thức thêm ABS trả về: "0\-0\+0\*0\-0\+0\=0\-0\+0\/0\-0\+0\*0\-0\+0"
Còn kết quả cuối cùng của công thức thì không thay đổi.

=======================================================
Mình kiểm tra thêm thì chỗ này có thể lược bớt thêm được 1 cái SUBSTITUTE nữa,
thay bằng
và bỏ 1 cái SUBSTITUTE ở trước đó

1733984009619.png
 
Lần chỉnh sửa cuối:
Như đã hứa, hôm nay tôi chia sẻ 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:
Mã:
=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:
Mã:
=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ề "###"
Bạn @cantl vào nhận hàng nhé.
--
Nhân tiện tôi chia sẻ luôn 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:
Mã:
=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:
Mã:
=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
Cho tôi hỏi là dãy ký tự KMHBBNSBTC nghĩa là gì vậy ạ.
 
Như đã hứa, hôm nay tôi chia sẻ 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:
Mã:
=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:
Mã:
=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ề "###"
Bạn @cantl vào nhận hàng nhé.
--
Nhân tiện tôi chia sẻ luôn 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:
Mã:
=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:
Mã:
=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
cảm ơn bạn rất nhiều.
 
1736216711329.png
Bấy lâu e toàn xài công thức này, cám ơn anh đã xây dựng 1 hàm tinh gọn trong 1 dòng. Quá đã./.
 

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

Back
Top Bottom