Hỏi - Công thức trả về một vectơ các giá trị max của mỗi hàng trong mảng/ matrix (1 người xem)

  • Thread starter Thread starter VMH0307
  • Ngày gửi Ngày gửi

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

VMH0307

Girls From Your City - Anonymous Casual Dating - N
Tham gia
5/8/11
Bài viết
766
Được thích
611
Giới tính
Nữ
Nghề nghiệp
Dating
Em xin hỏi mọi người: ta có cách nào mà chỉ sử dụng các hàm có sẵn của excel để tạo ra 1 vectơ/ mảng các giá trị lớn nhất của mỗi hàng trong 1 mảng hoặc ma trận không?
Ví dụ:
có ma trận sau:
5---10---7----3
0----8---5---10
7----1---8----2
7----4---6----0
kết quả trả về {10;10;8;7}
Rất mong nhận được sự giải đáp của mọi người!
 
Em xin hỏi mọi người: ta có cách nào mà chỉ sử dụng các hàm có sẵn của excel để tạo ra 1 vectơ/ mảng các giá trị lớn nhất của mỗi hàng trong 1 mảng hoặc ma trận không?
Ví dụ:
có ma trận sau:
5---10---7----3
0----8---5---10
7----1---8----2
7----4---6----0
kết quả trả về {10;10;8;7}
Rất mong nhận được sự giải đáp của mọi người!
Tôi nghĩ là.. có thể được nhưng bạn nên cho file mẫu lên đây nhé (để biết cái ma trận mà bạn nói được bố trí thế nào trên sheet)
Tuy nhiên tôi giả định rằng ma trận ấy được sắp xếp mỗi phần tử nằm 1 cell từ A1 đến D4
Vậy công thức bạn cần là
Mã:
=SUBTOTAL(104,OFFSET(A1:D1,ROW($1:$4)-1,))
Sau khi gõ xong công thức và Enter, bạn quét chọn chuổi công thức trên thanh Formula rồi bấm F9, bạn sẽ thấy ngay kết quả ={10;10;8;7}
 
Em cám ơn thầy!
Vậy em muốn 1 ma trận khác tự tạo, giá trị không ở trên sheet thì làm như thế nào ạ?
ví dụ 1 ma trận n x n (dạng tam giác trên) như sau:
=(ROW(1:n)/ROW(1:n)*TRANSPOSE(ROW(1:n))>=ROW(1:n))*matrix (1 x n)
ví dụ:
=(ROW(1:4)/ROW(1:4)*TRANSPOSE(ROW(1:4))>=ROW(1:4))*{5,10,7,3}
cho ra ma trận:
5---10---7---3
0---10---7---3
0----0---7---3
0----0---0---3
 
Em cám ơn thầy!
Vậy em muốn 1 ma trận khác tự tạo, giá trị không ở trên sheet thì làm như thế nào ạ?
ví dụ 1 ma trận n x n (dạng tam giác trên) như sau:
=(ROW(1:n)/ROW(1:n)*TRANSPOSE(ROW(1:n))>=ROW(1:n))*matrix (1 x n)
ví dụ:
=(ROW(1:4)/ROW(1:4)*TRANSPOSE(ROW(1:4))>=ROW(1:4))*{5,10,7,3}
cho ra ma trận:
5---10---7---3
0---10---7---3
0----0---7---3
0----0---0---3

Loại bài toán này chỉ có thể giải quyết bằng SUBTOTAL. Đáng tiếc là SUBTOTAL chỉ hoặc động với Range mà không dùng được với mảng (trừ phi bạn gõ công thức tạo matrix kia trực tiếp trên sheet)
 
Tôi hỏi tiếp cái: không biết kết quả {10;10;8;7} bạn muốn đặt trên sheet hay chỉ muốn nó là 1 mảng bình thường để tính toán tiếp sau đó
(Vì nếu với kết quả ấy mà đặt trên sheet thì làm được)
Ví dụ vầy:
- Bạn quét 4 cell dọc (chẳng hạn là G1:G4)
- Gõ công thức này vào thanh Formula:
Mã:
=MAX(INDEX([COLOR=#ff0000](ROW(1:4)/ROW(1:4)*TRANSPOSE(ROW(1:4))>=ROW(1:4))*{5,10,7,3}[/COLOR],ROW(1:4),))
- Xong bấm Ctrl + Shift + Enter sẽ có kết quả
 
Vâng, em muốn nó là 1 vector để tính toán tiếp thầy ạ!
 
Với ma trận tam giác vuông em giả định ở bài #3
5---10---7---3
0---10---7---3
0----0---7---3
0----0---0---3
Em vừa nghĩ ra cách như sau:
1. Đặt các Name:
Matrix:
Mã:
=(ROW($1:$4)/ROW($1:$4)*TRANSPOSE(ROW($1:$4))>=ROW($1:$4))*{5,10,7,3}
NLV :
Mã:
=MMULT((ROW($1:$4)/ROW($1:$4)*TRANSPOSE(ROW($1:$4))<=ROW($1:$4))*1,ROW($1:$4))
STT:
Mã:
=ROW(INDIRECT("1:"&COUNT(Matrix)))

và hàm trả về 1 mảng các giá trị lớn nhất của mỗi hàng trong Matrix như sau:

Mã:
=(LOOKUP(NLV,STT,LARGE(Matrix,STT))<={5;10;7;3})*{5;10;7;3}+(LOOKUP(NLV,STT,LARGE(Matrix,STT))>{5;10;7;3})*LOOKUP(NLV,STT,LARGE(Matrix,STT))
(Ctrl + Shift + Enter)
quét công thức và nhấn F9 để xem kết quả mảng trả về là {10;10;7;3}
 
Lần chỉnh sửa cuối:
Mục đích của em ở đây là tiến hành tìm các giá trị Max của dãy số có n số, lần lượt các dãy có số chữ số từ 1 đến k với k=1 đến n mà không sử dụng đến cột phụ trên sheet.
Ví dụ {3;7;10;5} sẽ có các mức Max là {3;7;10;10} bao gồm {max(3); max(3;7); max(3;7;10); max(3;7;10;5)}
Vậy em mong mọi người đóng góp thêm những giải pháp khác về sử dụng công thức có sẵn trên excel để giải quyết vấn đề này.
Em cám ơn.
 

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

Back
Top Bottom