Các bác cho em hỏi là có cách nào nối 2 hay nhiều mảng thành 1 mảng giống như hàm concatenate nối các chuỗi lại không nhỉ? Ví dụ như nối 3 mảng {0;0;0;0;0} ; {2;2;2;2;2} ; {3;3;3;3;3} thành {0;0;0;0;0;2;2;2;2;2;3;3;3;3;3}
Các bác cho em hỏi là có cách nào nối 2 hay nhiều mảng thành 1 mảng giống như hàm concatenate nối các chuỗi lại không nhỉ? Ví dụ như nối 3 mảng {0;0;0;0;0} ; {2;2;2;2;2} ; {3;3;3;3;3} thành {0;0;0;0;0;2;2;2;2;2;3;3;3;3;3}
Nếu dùng trong công thức tính toán thì chỉ cần: = AGGREGATE(15,6,CHOOSE({1,2,3},{0;0;0;0;0},{2;2;2;2;2},{3;3;3;3;3}),ROW(1:15)), dùng thêm Index(......,) xem cho dễ hơn vì Cell không thể chứa kết quả là 1 mảng.
Chúc bạn ngày vui. p/s: Bạn nên phân biệt rõ 'Mảng' và 'Vùng' nha, vì có giống và khác nhau đó.
Nếu dùng trong công thức tính toán thì chỉ cần: = AGGREGATE(15,6,CHOOSE({1,2,3},{0;0;0;0;0},{2;2;2;2;2},{3;3;3;3;3}),ROW(1:15)), dùng thêm Index(......,) xem cho dễ hơn vì Cell không thể chứa kết quả là 1 mảng.
Chúc bạn ngày vui. p/s: Bạn nên phân biệt rõ 'Mảng' và 'Vùng' nha, vì có giống và khác nhau đó.
Cảm ơn bác nhiều ạ. Sẵn đây bác cho em hỏi là tại sao dùng Công thức INDEX(SMALL(CHOOSE({1\2\3};{0;0;0;0;0};{2;2;2;2;2};{3;3;3;3;3});ROW(1:15)) thì được mà dùng INDEX(SMALL(CHOOSE({1;2;3};{0;0;0;0;0};{2;2;2;2;2};{3;3;3;3;3});ROW(1:15)) lại báo lỗi #NA nhỉ? Bác cho em hỏi dấu \ và dấu ; trong công thức mảng khác nhau như thế nào ạ
Cảm ơn bác nhiều ạ. Sẵn đây bác cho em hỏi là tại sao dùng Công thức INDEX(SMALL(CHOOSE({1\2\3};{0;0;0;0;0};{2;2;2;2;2};{3;3;3;3;3});ROW(1:15)) thì được mà dùng INDEX(SMALL(CHOOSE({1;2;3};{0;0;0;0;0};{2;2;2;2;2};{3;3;3;3;3});ROW(1:15)) lại báo lỗi #NA nhỉ? Bác cho em hỏi dấu \ và dấu ; trong công thức mảng khác nhau như thế nào ạ
Cái đó là do Control Panel máy bạn định dạng theo hệ thống Vietnamese nên nó thay đổi dấu ngăn cách số khác với hệ thống Anh Mỹ, và dấu "," phân cách côt trong công thức 'Mảng' bị thay bằng "\".
Cái đó là do Control Panel máy bạn định dạng theo hệ thống Vietnamese nên nó thay đổi dấu ngăn cách số khác với hệ thống Anh Mỹ, và dấu "," phân cách côt trong công thức 'Mảng' bị thay bằng "\".
Nếu bạn đã hiểu rồi, tôi muốn hỏi thêm: do trường hợp bạn đưa ra là các 'Mảng 1 chiều' bằng nhau về độ dài (5 dòng), vậy nếu nó không đồng đều thì bạn sẽ xử lý như thế nào?
Ví dụ: 3 mảng {0;0;0;0;0;0;0}, {2;2;2}; {3;3;3;3;3;3;3;3;3;3}
Nếu bạn đã hiểu rồi, tôi muốn hỏi thêm: do trường hợp bạn đưa ra là các 'Mảng 1 chiều' bằng nhau về độ dài (5 dòng), vậy nếu nó không đồng đều thì bạn sẽ xử lý như thế nào?
Ví dụ: 3 mảng {0;0;0;0;0;0;0}, {2;2;2}; {3;3;3;3;3;3;3;3;3;3}
Em sử dụng hàm IFERROR như sau: INDEX(SMALL(IFERROR(CHOOSE({1\2\3};{0;0;0;0;0;0;0};{2;2;2};{3;3;3;3;3;3;3;3;3;3});1000);ROW(1:20)). Không biết có cách nào hay hơn nữa không? Mà sẵn đây em hỏi bác luôn là có hàm nào xóa phần tử trong mảng không bác? VD như {0;0;0;0;0;2;2;2;2;2;3;3;3;3;3} xóa các phần tử 2 đi chỉ còn lại: {0;0;0;0;0;3;3;3;3;3}. hoặc tổng quát hơn là xóa n phần tử từ vị trí thứ k ạ?
Em sử dụng hàm IFERROR như sau: INDEX(SMALL(IFERROR(CHOOSE({1\2\3};{0;0;0;0;0;0;0};{2;2;2};{3;3;3;3;3;3;3;3;3;3});1000);ROW(1:20)). Không biết có cách nào hay hơn nữa không? Mà sẵn đây em hỏi bác luôn là có hàm nào xóa phần tử trong mảng không bác? VD như {0;0;0;0;0;2;2;2;2;2;3;3;3;3;3} xóa các phần tử 2 đi chỉ còn lại: {0;0;0;0;0;3;3;3;3;3}. hoặc tổng quát hơn là xóa n phần tử từ vị trí thứ k ạ?
1. Em sử dụng hàm IFERROR như sau: INDEX(SMALL(IFERROR(CHOOSE({1\2\3};{0;0;0;0;0;0;0};{2;2;2};{3;3;3;3;3;3;3;3;3;3});1000);ROW(1:20)). Không biết có cách nào hay hơn nữa không?
Chính xác, phải dùng Small(Iferror()), nhưng thay vì bạn điền 1000 thì chỉ cần "" thôi vì hàm Small() 'phớt lờ' giá trị chuỗi.
Chính vì lẽ đó lúc đầu tôi giới thiệu hàm Aggregate() cho bạn, với nó dù cho có đồng đều hay không đồng đều trong các 'Mảng' nó vẫn luôn nối các 'Mảng' như yêu cầu mà không cần dùng thêm Iferror(). Khuyên bạn nên 'nâng cấp' Excel lên phiên bản cao hơn để có hàm 'hay' hỗ trợ khi nghiên cứu công thức mảng.
2. Mà sẵn đây em hỏi bác luôn là có hàm nào xóa phần tử trong mảng không bác? VD như {0;0;0;0;0;2;2;2;2;2;3;3;3;3;3} xóa các phần tử 2 đi chỉ còn lại: {0;0;0;0;0;3;3;3;3;3}. hoặc tổng quát hơn là xóa n phần tử từ vị trí thứ k ạ?
Việc xóa 'Mảng' bằng công thức rất 'khó khăn' không như VBA. Do vậy, tùy nghi mà ứng biến: như dùng cột phụ, hay kết hợp nhiều hàm......
Một trong cách để loại trừ là dùng hàm LOOKUP(), như ví dụ của bạn tôi sẽ làm như sau:
Chọn A1:A10
Ctrl+Shift+Enter (nhớ thay đổi dấu "," thành ";" để phù hợp hệ thống Vietnamese của bạn).
Bạn thấy Lookup() này 'kỳ lạ' không?
3. Bạn đã trả lời tốt về các Mảng không đều kích thước, nhưng đó là số nên dùng Small() hoặc Aggregate() được, vậy nếu nó là chuỗi 'Mảng' như 3 Mảng: {"a";"b";"c";"d";"e"}, {"f";"g";"h";"i";"j";"w"}), {"k";"l";"m";"n";"o";"p";"q";"r"} thì bạn làm sao để nối chuỗi đó thành: {"a";"b";"c";"d";"e";"f";"g";"h";"i";"j";"w";"k";"l";"m";"n";"o";"p";"q";"r"} !? Nhớ là 'Mảng' nha, không phải 'Vùng'.
Chúc bạn học tập vui với công thức 'Mảng' của GPE.
1. Em sử dụng hàm IFERROR như sau: INDEX(SMALL(IFERROR(CHOOSE({1\2\3};{0;0;0;0;0;0;0};{2;2;2};{3;3;3;3;3;3;3;3;3;3});1000);ROW(1:20)). Không biết có cách nào hay hơn nữa không?
Chính xác, phải dùng Small(Iferror()), nhưng thay vì bạn điền 1000 thì chỉ cần "" thôi vì hàm Small() 'phớt lờ' giá trị chuỗi.
Chính vì lẽ đó lúc đầu tôi giới thiệu hàm Aggregate() cho bạn, với nó dù cho có đồng đều hay không đồng đều trong các 'Mảng' nó vẫn luôn nối các 'Mảng' như yêu cầu mà không cần dùng thêm Iferror(). Khuyên bạn nên 'nâng cấp' Excel lên phiên bản cao hơn để có hàm 'hay' hỗ trợ khi nghiên cứu công thức mảng.
2. Mà sẵn đây em hỏi bác luôn là có hàm nào xóa phần tử trong mảng không bác? VD như {0;0;0;0;0;2;2;2;2;2;3;3;3;3;3} xóa các phần tử 2 đi chỉ còn lại: {0;0;0;0;0;3;3;3;3;3}. hoặc tổng quát hơn là xóa n phần tử từ vị trí thứ k ạ?
Việc xóa 'Mảng' bằng công thức rất 'khó khăn' không như VBA. Do vậy, tùy nghi mà ứng biến: như dùng cột phụ, hay kết hợp nhiều hàm......
Một trong cách để loại trừ là dùng hàm LOOKUP(), như ví dụ của bạn tôi sẽ làm như sau:
Chọn A1:A10
Ctrl+Shift+Enter (nhớ thay đổi dấu "," thành ";" để phù hợp hệ thống Vietnamese của bạn).
Bạn thấy Lookup() này 'kỳ lạ' không?
3. Bạn đã trả lời tốt về các Mảng không đều kích thước, nhưng đó là số nên dùng Small() hoặc Aggregate() được, vậy nếu nó là chuỗi 'Mảng' như 3 Mảng: {"a";"b";"c";"d";"e"}, {"f";"g";"h";"i";"j";"w"}), {"k";"l";"m";"n";"o";"p";"q";"r"} thì bạn làm sao để nối chuỗi đó thành: {"a";"b";"c";"d";"e";"f";"g";"h";"i";"j";"w";"k";"l";"m";"n";"o";"p";"q";"r"} !? Nhớ là 'Mảng' nha, không phải 'Vùng'.
Chúc bạn học tập vui với công thức 'Mảng' của GPE.
Cái này khó quá bác ah. Em thử nhiều cách rồi mà vẫn không được? Phần mảng này bao la và khó hiểu quá. Bác cho em hỏi là trong mảng thì thứ tự các phần tử được đếm như thế nào ạ? Có phả là đếm từ trái qua phải, từ trên xuống dưới, tức là đếm theo cột trước rồi mới đến hàng phải không ạ
Bác cho em hỏi trong mảng {"a","b",'"c";"d","e","f";"g","h","j"} thì phần tử "e" có số thứ tự là 5 phải không ạ? tức là đếm theo cột trước rồi mới đến hàng?
Bác cho em hỏi là trong mảng thì thứ tự các phần tử được đếm như thế nào ạ? Có phả là đếm từ trái qua phải, từ trên xuống dưới, tức là đếm theo cột trước rồi mới đến hàng phải không ạ
Thời gian đầu tiếp xúc với 'Mảng' thì "Nó' điều khiển mình, vì lúc đó nó như con ngựa chứng vậy, dần dà khi bạn đã biết các 'tính khí' của nó rồi, tức ngựa đã thuần phục, thì bạn sẽ điều khiển lại nó, sớm hay muộn là do tài năng và sự đầu tư của bạn.
Bác cho em hỏi trong mảng {"a","b",'"c";"d","e","f";"g","h","j"} thì phần tử "e" có số thứ tự là 5 phải không ạ? tức là đếm theo cột trước rồi mới đến hàng?
Nếu là 'Vùng' do có địa chỉ tồn tại hẵn hoi trên sheet nên rất dễ dàng gọi nó ra Vd: B15, AW21, hay C1:Z1500.....
Riêng 'Mảng' nằm trên 'bộ nhớ' nên nó không có địa chỉ cụ thể như 'Vùng', chính vì vậy bạn phải lấy được 'tọa độ' của nó, tức cũng phải chỉ ra được Dòng xxx Cột yyy cho các thành phần của 'Mảng' cần lấy, chứ không thể như bạn nói nó ở vị trí thứ 5 được.
Rất thú vị! vì nó kích thích trí tưởng tượng của bạn rất nhiều.
Nếu là 'Vùng' do có địa chỉ tồn tại hẵn hoi trên sheet nên rất dễ dàng gọi nó ra Vd: B15, AW21, hay C1:Z1500.....
Riêng 'Mảng' nằm trên 'bộ nhớ' nên nó không có địa chỉ cụ thể như 'Vùng', chính vì vậy bạn phải lấy được 'tọa độ' của nó, tức cũng phải chỉ ra được Dòng xxx Cột yyy cho các thành phần của 'Mảng' cần lấy, chứ không thể như bạn nói nó ở vị trí thứ 5 được.
Rất thú vị! vì nó kích thích trí tưởng tượng của bạn rất nhiều.
Thời gian đầu tiếp xúc với 'Mảng' thì "Nó' điều khiển mình, vì lúc đó nó như con ngựa chứng vậy, dần dà khi bạn đã biết các 'tính khí' của nó rồi, tức ngựa đã thuần phục, thì bạn sẽ điều khiển lại nó, sớm hay muộn là do tài năng và sự đầu tư của bạn.
Thấy bài này kéo dài ghê... Em thì nghĩ bài thực tế không tới mức xài mảng "khủng long" như thế này, đó chỉ là "ý tưởng" bất chợt đến như "cơn mưa cuối hè..."
Ở chỗ em vừa có cơn mưa rào anh ạ. Híc.
Thấy bài này kéo dài ghê... Em thì nghĩ bài thực tế không tới mức xài mảng "khủng long" như thế này, đó chỉ là "ý tưởng" bất chợt đến như "cơn mưa cuối hè..."
Ở chỗ em vừa có cơn mưa rào anh ạ. Híc.
Đúng như em nói! bài lẽ ra cũng đã xong theo yêu cầu.
Tuy nhiên, như em biết, 'Công thức Mảng' như một thứ gây nghiện khi mình cố tình thử và dấn sâu vào nó, càng 'dấn thân' càng lạ lùng vì những cái nó tạo ra nên càng 'cuốn hút' thành ra 'nghiện'. Cái chính qua bài này anh cũng muốn tỏ đến anh em đang trên đường nghiên cứu 'Mảng' phải phân biệt được:
'Vùng' là gì?
'Mảng' là gì?
Sự giống và khác nhau của 'Mảng' và 'Vùng'.
Các bài toán cơ bản 'tác động' cấu thành từ những tổ hợp 'Mảng'
Giống như em vậy, 'nghiện' VBA nên chuyên tâm nghiên cứu và hiện nay có một loạt bài về 'VBA' gửi lên diễn đàn mà anh rất hoan nghênh, vui mừng, thầm phục và ngưỡng mộ em lắm lắm.