Pi-Pikachu
Thành viên chính thức
- Tham gia
- 22/2/21
- Bài viết
- 71
- Được thích
- 22
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.
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ề "###"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))
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
Hình như bỏ chữ giỏi đi rồi bácThì 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.
=SUBSTITUTE("dấu, phẩy, này, phải, không";",";"")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
Nghĩa là số 1 đọc thành một, số 2 đọc thành hai, .....? Đúng thì Bạn đã đọc nội dung và file ở bài #1 chưa?Em xin CT chỉ đọc số thôi với ạ, Cảm ơn anh !
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ỗiNhư đã 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:
Tiếng Anh: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))
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ề "###"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))
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:
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;{"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)))
--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
Save as thành file .xlsx, đóng file, mở lại rồi nhập công thức.@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?
View attachment 295914
Excel 2010 32bit.
Tôi muốn giữ nguyên định dạng file .xls ấy. File xls sẽ chứa được macro.Save as thành file .xlsx, đóng file, mở lại rồi nhập công thức.
Muốn sử dụng macro thì lưu dạng .xlsm thôi.Tôi muốn giữ nguyên định dạng file .xls ấy. File xls sẽ chứa được marco.
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))
Đú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.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
mình thay bằngTEXT(A1,SUBSTITUTE("0\*0\=0\/0\*0;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.TEXT(ABS(A1),SUBSTITUTE("0\*0\=0\/0\*0",0,"0\-0\+0"))
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.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.
Ý mình là chỉ ngắn hơn chỗ kết quả của TEXT thôi bạn ạ.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.
thay bằng",=","="),"="," tỷ,"
và bỏ 1 cái SUBSTITUTE ở trước đó",="," tỷ,"
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:
Tiếng Anh: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))
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ề "###"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))
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:
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;{"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)))
--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
Chỗ này thì không rút gọn như vậy được đâu bạn.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,
View attachment 306251
Dãy ký tự đó là chữ cái đầu của các chữ từ 0 đến 9.Cho tôi hỏi là dãy ký tự KMHBBNSBTC nghĩa là gì vậy ạ.