Xin giúp đỡ: Liệu có thể xây dựng đệ quy trong một công thức Excel?

Liên hệ QC

vietnamvn

Thành viên mới
Tham gia
2/10/22
Bài viết
25
Được thích
9
- Em có tìm thấy trên diễn đàn một công thức lấy tổng là một chữ số của các chữ số có trong một số (số trong 1 ô Execl). Công thức của anh @Phuocam nội dung như sau:
len1.JPG
+ Có giá trị ô A1=1234 nó có tổng 1 chữ số là 0
+ Công thức tại A2 là:
Mã:
=IF(LEN(A1)>1;TEXT(SUMPRODUCT(MOD(MID(A1;ROW(INDIRECT("1:"&LEN(A1)-1));1)+MID(A1;ROW(INDIRECT("2:"&LEN(A1)));1);10)
*10^(LEN(A1)-ROW(INDIRECT("2:"&LEN(A1)))));REPT(0;LEN(A1)-1));"")
Và từ A2 kéo công thức xuống cho đến khi kết quả có độ dài ký tự là 1. Thì được kết quả là 0
+ Nội dung công thức như sau:
1234
357
82
0 (đây là kết quả cần tìm vì độ dài ký tự của nó là 1)
#Lấy: 1+2 =3; 2+3=5; 3+4 = 7, các tổng 3;5;7 đều là số có độ dài ký tự = 1 tức Len = 1, nên lên có số mới hình thành là 357
#Lấy: 3+ 5 = 8; 5+7 = 12 vì 12 là số có độ dài ký tự = 2 tức Len = 2, nên tổng 12 chỉ lấy giá trị là 12-10 = 2. Được số mới hình thành là 82
#Lấy: 8+2 = 10 vì 10 là số độ dài ký tự = 2 lên tổng 10 này chỉ lấy giá trị là 10-10 = 0.

- Nếu một số bất kỳ có độ dài lớn 2 thì áp dụng công thức trên được cách tính tổng như mong muốn như phần thuyết minh ở trên. Cứ mỗi lần áp dụng công thức thì hình thành một số có độ dài ký tự giảm đi 1, cho đến khi còn 1 ký tự là được kết quả.
---Nhưng ở đây em muốn từ A2 đặt công thức là ra luôn kết quả là 0 thì liệu có thể xây dựng một đệ quy(nghĩa thay vì kéo xuống nhiều dòng thì lấy được luôn số có có độ dài 1 ký tự) ngay trong một hàm ở ô A2 ra luôn kết quả là 0 được không ạ?

Xin giúp đỡ em trường hợp này!
Chân thành cảm ơn!
 

File đính kèm

  • dequytrong1cell.xlsx
    9.3 KB · Đọc: 9
Lần chỉnh sửa cuối:
- Em có tìm thấy trên diễn đàn một công thức lấy tổng là một chữ số của các chữ số có trong một số (số trong 1 ô Execl). Công thức của anh @Phuocam nội dung như sau:
View attachment 283701
+ Có giá trị ô A1=1234 nó có tổng 1 chữ số là 0
+ Công thức tại A2 là:
Mã:
=IF(LEN(A1)>1;TEXT(SUMPRODUCT(MOD(MID(A1;ROW(INDIRECT("1:"&LEN(A1)-1));1)+MID(A1;ROW(INDIRECT("2:"&LEN(A1)));1);10)
*10^(LEN(A1)-ROW(INDIRECT("2:"&LEN(A1)))));REPT(0;LEN(A1)-1));"")
Và từ A2 kéo công thức xuống cho đến khi kết quả có độ dài ký tự là 1. Thì được kết quả là 0
+ Nội dung công thức như sau:
1234
357
82
0 (đây là kết quả cần tìm vì độ dài ký tự của nó là 1)
#Lấy: 1+2 =3; 2+3=5; 3+4 = 7, các tổng 3;5;7 đều là số có độ dài ký tự = 1 tức Len = 1, nên lên có số mới hình thành là 357
#Lấy: 3+ 5 = 8; 5+7 = 12 vì 12 là số có độ dài ký tự = 2 tức Len = 2, nên tổng 12 chỉ lấy giá trị là 12-10 = 2. Được số mới hình thành là 82
#Lấy: 8+2 = 10 vì 10 là số độ dài ký tự = 2 lên tổng 10 này chỉ lấy giá trị là 10-10 = 0.

- Nếu một số bất kỳ có độ dài lớn 2 thì áp dụng công thức trên được cách tính tổng như mong muốn như phần thuyết minh ở trên. Cứ mỗi lần áp dụng công thức thì hình thành một số có độ dài ký tự giảm đi 1, cho đến khi còn 1 ký tự là được kết quả.
---Nhưng ở đây em muốn từ A2 đặt công thức là ra luôn kết quả là 0 thì liệu có thể xây dựng một đệ quy(nghĩa thay vì kéo xuống nhiều dòng thì lấy được luôn số có có độ dài 1 ký tự) ngay trong một hàm ở ô A2 ra luôn kết quả là 0 được không ạ?

Xin giúp đỡ em trường hợp này!
Chân thành cảm ơn!
Nếu dùng office 365 thì có lẽ có cách
 
Em dùng 365 ạ. Có cách nào giúp em với bác!
Bạn bấm Ctrl+F3 đặt Name cho hàm dưới là "a":
Mã:
=LAMBDA(x,IF(LEN(x)=1,x,a(CONCAT(LET(b,MID(x,SEQUENCE(LEN(x)-1),1)+MID(x,SEQUENCE(LEN(x)-1,,2),1),IF(LEN(b)=1,b,b-10))))))
Rồi gõ công thức =a(a1) trên sheet
 
Bạn bấm Ctrl+F3 đặt Name cho hàm dưới là "a":
Mã:
=LAMBDA(x,IF(LEN(x)=1,x,a(CONCAT(LET(b,MID(x,SEQUENCE(LEN(x)-1),1)+MID(x,SEQUENCE(LEN(x)-1,,2),1),IF(LEN(b)=1,b,b-10))))))
Rồi gõ công thức =a(a1) trên sheet
Cảm ơn anh. Vậy là do 365 có hàm Lamda mới giúp ta tạo ra hàm có vòng lặp ở trong nó phải không ạ?
Cảm ơn bác người các loại tổng.
 
Web KT
Back
Top Bottom