Hàm UDF tính từng dòng trong một vùng ô.

Liên hệ QC

htin1997

Dậm chân tại chỗ là đi lùi.
Tham gia
12/10/20
Bài viết
317
Được thích
272
Xin chào các thành viên diễn đàn.

Nhờ các thành viên viết giúp em hàm UDF tính trung bình, biên độ, rả kết quả theo từng dòng trong vùng đã chọn(vùng của hàm trả mảng động trong Excel365, ví dụ: E2#,...).
Mục đích: Tự động tăng/giảm dòng tuỳ theo số dòng của hàm FILTER mà không cần phải kéo hoặc xoá công thức tính.

Chi tiết trong file đính kèm, chỗ nào chưa rõ em sẽ giải thích thêm.
Xin cám ơn.
 

File đính kèm

  • SPC.xlsx
    12.3 KB · Đọc: 20
Theo tôi thực hành thấy các hàm số Excel có đối số là vùng (range), thì đối số đó không áp dụng cho hàm mảng động của Excel được.
 
Upvote 0
Theo tôi thực hành thấy các hàm số Excel có đối số là vùng (range), thì đối số đó không áp dụng cho hàm mảng động của Excel được.

Thực hành kiểu gì hay vậy bạn?

Đối số của hàm này thì liên quan gì đối số của hàm khác?

Có sự liên quan bí mật khủng khiếp nào ở đây chăng?
 
Upvote 0
Xin chào các thành viên diễn đàn.

Nhờ các thành viên viết giúp em hàm UDF tính trung bình, biên độ, rả kết quả theo từng dòng trong vùng đã chọn(vùng của hàm trả mảng động trong Excel365, ví dụ: E2#,...).
Mục đích: Tự động tăng/giảm dòng tuỳ theo số dòng của hàm FILTER mà không cần phải kéo hoặc xoá công thức tính.

Chi tiết trong file đính kèm, chỗ nào chưa rõ em sẽ giải thích thêm.
Xin cám ơn.
Bạn thử dùng công thức này:
Mã:
=BYROW(J4#,LAMBDA(a,AVERAGE(a)))
=BYROW(J4#,LAMBDA(a,MAX(a)-MIN(a)))
 
Upvote 0
Xin chào các thành viên diễn đàn.

Nhờ các thành viên viết giúp em hàm UDF tính trung bình, biên độ, rả kết quả theo từng dòng trong vùng đã chọn(vùng của hàm trả mảng động trong Excel365, ví dụ: E2#,...).
Mục đích: Tự động tăng/giảm dòng tuỳ theo số dòng của hàm FILTER mà không cần phải kéo hoặc xoá công thức tính.

Chi tiết trong file đính kèm, chỗ nào chưa rõ em sẽ giải thích thêm.
Xin cám ơn.
Nếu muốn lấy luôn cả kết quả filter thì tại J4 dùng hàm này:
Mã:
=LET(src,$A$4:INDEX($H:$H,MATCH("zzzz",A:A)),des,FILTER(INDEX(src,SEQUENCE(ROWS(src)),SEQUENCE(1,5,4)),INDEX(src,,1)=$K$3),c_des,COLUMNS(des)+2,IF(SEQUENCE(1,c_des)>c_des-1,BYROW(des,LAMBDA(arr,MAX(arr)-MIN(arr))),IF(SEQUENCE(1,7)>c_des-2,BYROW(des,LAMBDA(arr,AVERAGE(arr))),des)))
 
Upvote 0
Hàm ByRow và ByCol hay tuyệt. MS tạo ra nó để áp hàm Lambda cho đối số theo dòng hoặc theo cột.
 
Upvote 0
Nếu muốn lấy luôn cả kết quả filter thì tại J4 dùng hàm này:
Mã:
=LET(src,$A$4:INDEX($H:$H,MATCH("zzzz",A:A)),des,FILTER(INDEX(src,SEQUENCE(ROWS(src)),SEQUENCE(1,5,4)),INDEX(src,,1)=$K$3),
c_des,COLUMNS(des)+2,IF(SEQUENCE(1,c_des)>c_des-1,BYROW(des,LAMBDA(arr,MAX(arr)-MIN(arr))),
IF(SEQUENCE(1,7)>c_des-2,BYROW(des,LAMBDA(arr,AVERAGE(arr))),des)))
Viết gọn hơn:

Mã:
=LET(d,D4:H12,it,A4:A12,f,FILTER(d,it=K3),r,ROWS(f),c,COLUMNS(f),c_2,c+2,IF(SEQUENCE(1,c_2)<=c,INDEX(f,SEQUENCE(r ),
SEQUENCE( 1,c)),IF(SEQUENCE(1,c_2)=c+1,BYROW(f,LAMBDA(a,AVERAGE(a))),BYROW(f,LAMBDA(a,MAX(a)-MIN(a))))))

Nếu có hàm HStack:

Mã:
=LET(d,D4:H12,it,A4:A12,f,FILTER(d,it=K3),HSTACK(f,BYROW(f,LAMBDA(a,AVERAGE(a))),BYROW(f,LAMBDA(a,MAX(a)-MIN(a)))))
 
Upvote 0
Bạn thử dùng công thức này:
Mã:
=BYROW(J4#,LAMBDA(a,AVERAGE(a)))
=BYROW(J4#,LAMBDA(a,MAX(a)-MIN(a)))
Thật là tuyệt vời, cám ơn anh.
Vậy mới biết em tìm hiểu chưa thể hết tất cả các hàm, cứ có gì nằm ngoài các hàm phổ biến lại nghĩ ngay tới VBA. Thật hạn hẹp.--=0
Cám ơn các anh/chú đã giúp đỡ.
 
Upvote 0
Web KT

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

Back
Top Bottom