Thế nào là hàm mảng? công thức mảng?

Liên hệ QC

huyenduong

Thành viên mới
Tham gia
3/4/08
Bài viết
19
Được thích
5
Mấy hôm nay tìm hiểu về mảng. Nhưng càng xem càng rối quá, như đi vào ma trận vậy. Thấy các bác tranh luận trên diễn đàn rằng là các hàm SUMPRODUCT, ROW...bản thân là chúng là công thức mảng.
Vậy sự khác nhau giữa hàm và công thức là đâu? Bác nào giúp đưa ra định nghĩa chính xác về hàm mảng và công thức mảng với. Chứ em tìm hiểu mà bản thân định nghĩa về nó còn lơ mơ quá.
 
Cho em hỏi thêm 1 vấn đề nữa. Đó là:
Khi em tạo 1 mảng dọc:VB thế này ={10;20;30} rồi nhấn Ctrl+shift+Enter thì Ok không vấn đề gì. Nhưng khi tạo mảng ngang ={10,20,30} rồi nhấn Ctrl+Shift+Enter thì nó báo lỗi. Nếu mình nhấn Ok tiếp thì giá trị trong ba ô mình chọn sẽ ra: 10,2030. Nhờ mọi người chỉ giúp lỗi?
 
Mấy hôm nay tìm hiểu về mảng. Nhưng càng xem càng rối quá, như đi vào ma trận vậy. Thấy các bác tranh luận trên diễn đàn rằng là các hàm SUMPRODUCT, ROW...bản thân là chúng là công thức mảng.
Vậy sự khác nhau giữa hàm và công thức là đâu? Bác nào giúp đưa ra định nghĩa chính xác về hàm mảng và công thức mảng với. Chứ em tìm hiểu mà bản thân định nghĩa về nó còn lơ mơ quá.

Bạn có thể tham khảo công thức mảng theo đường dẫn này:
http://www.giaiphapexcel.com/forum/showpost.php?p=30743&postcount=56
 
Cho em hỏi thêm 1 vấn đề nữa. Đó là:
Khi em tạo 1 mảng dọc:VB thế này ={10;20;30} rồi nhấn Ctrl+shift+Enter thì Ok không vấn đề gì. Nhưng khi tạo mảng ngang ={10,20,30} rồi nhấn Ctrl+Shift+Enter thì nó báo lỗi. Nếu mình nhấn Ok tiếp thì giá trị trong ba ô mình chọn sẽ ra: 10,2030. Nhờ mọi người chỉ giúp lỗi?
Coi chừng có liên quan đến quy định về dấu phân cách trong Control Panel ---> Nhớ không lầm thì đã từng có 1 bạn hỏi câu tương tự, cuối cùng mới phát hiện máy của bạn ấy đã Set các dấu phân cách công thức.. chả giống ai!
 
Chứ em tìm hiểu mà bản thân định nghĩa về nó còn lơ mơ quá.
Các hàm về mảng và việc lập công thức mảng là rất hay, tuy nhiên nó hơi trìu tượng bạn à. Ban đầu tìm hiểu về mảng và công thức mảng mình cung thấy rối mù, và khó hiểu. Bằng cách đọc lý thuyết, xem kỹ cấu trúc hàm và làm đi làm lại các bài tập từ đơn giản đền phức tạp để nhớ và hiểu cách tính toán của các hàm về mảng.
Ngoài bài mà bạn minhthien đã linhk cho bạn, bạn tham khảo bài viết của bác TuanVNUNI để hiểu thêm về công thức mảng nhé.
http://www.giaiphapexcel.com/forum/showthread.php?t=59

"Có công mài sắt có ngày thành xà beng" bạn ạ!
Chúc bạn thành công!
 
Em không rõ lắm, nhưng chưa từng nghe Match là hàm mảng bao giờ.
 
Em xin hỏi hàm Match liệu có phải là hàm mảng không? Vì em Test trong bài http://www.giaiphapexcel.com/forum/showthread.php?64613-T%C3%A1ch-k%C3%BD-t%E1%BB%B1-trong-chu%E1%BB%97i/page3 thấy nó có khác Lookup

Thấy bạn có ý tìm tỏi học hỏi truy nguyên vấn đề, tôi cũng muốn bàn bạc thêm về mảng.

Mảng là 1 món "đặc sản" của Excel, hoạt động rất hiệu quả đặc biệt khi bạn cần lặp lại phép tính dùng các giá trị khác nhau.
VD: A1:A2=0, với A1=0, A2=1, sẽ lần lượt so sánh từng giá trị tại A1:A2, trả về 1 mảng {TRUE; FALSE}
Vậy tại sao SUMPRODUCT là công thức mảng nên không cần dùng ctrl-shift-enter?
Gỉả sử B1=3, B2=4,
SUMPRODUCT((A1:A2=0)*B1:B2) sẽ lấy (A1=0)*B1 cộng với (A2=0)*B2 = 1*B1 + 0*B2 = 3
Ta thấy kết quả trả về là một giá trị
Bản thân SUMPRODUCT đã quy định tham số của nó là các mảng, nên nó là hàm mảng.

Vậy công thức mảng là gì? đây còn gọi là công thức có chứa các hàm ép mảng, tức là bản thân nó là hàm thường, bị ép thành hàm mảng.
VD: hàm COUNTIF(A1:A2,B1) trả về 1 giá trị đếm, khác với hàm COUNTIF(A1:A2,B1:B2) trả về đồng thời 2 giá trị đếm. Vì hàm COUNTIF lưỡng tính, nên khi lồng vào trong 1 công thức phải có động tác báo cho Excel biết nó thuộc loại gì, bằng không mặc nhiên hiểu là công thức thường và báo lỗi nếu thuộc loại ép mảng. VD: MATCH(1,COUNTIF(A1:A2,B1:B2),0) là công thức mảng
Tóm lại, sự khác nhau giữa công thức mảng và công thức thường là công thức mảng xử lý đồng thời vài giá trị, thay vì chỉ xử lý một giá trị mỗi lần.
Một tiến trình công thức mảng không chỉ có thể xử lý đồng thời vài giá trị, nó cũng có thể trả về đồng thời vài giá trị. Kết quả của một công thức mảng cũng là một mảng
Các hàm mảng, riêng tôi thường dùng là SUMPRODUCT, FREQUENCY, TRANSPORE,...

Bản thân hàm MATCH không phải là hàm mảng, tuy nhiên nếu nó sử dụng đối số là hàm ép mảng, nó cũng bị ép thành hàm mảng luôn.

Còn vấn đề tại sao LOOKUP không phải ctrl-shift-enter, theo tôi suy luận, nó rà từng trường hợp, khi gặp điều kiện thỏa là trả kết quả luôn.
MATCH thì không vậy, nó rà từ đầu mảng tới cuối mảng, sau đó mới xét tới điều kiện tham số 0,1 hay -1 để ra quyết định trả kết quả. Điều này tôi không chắc lắm. Hên xui.
 
MATCH thì không vậy, nó rà từ đầu mảng tới cuối mảng, sau đó mới xét tới điều kiện tham số 0,1 hay -1 để ra quyết định trả kết quả. Điều này tôi không chắc lắm. Hên xui.

Em đã suy nghĩ nhiều về câu trên của anh, nhưng bản thân vẫn còn thấy vẫn còn hơi lăn tăn anh ah (chưa cảm thấy thỏa mãn 100%). Cảm ơn anh rất nhiều.

Rất kinh mong các thày Ndu, Ptm0412,....các anh chị cho thêm ý kiến, giúp em hiểu thêm về vấn đề này nhé.
 
Em đã suy nghĩ nhiều về câu trên của anh, nhưng bản thân vẫn còn thấy vẫn còn hơi lăn tăn anh ah (chưa cảm thấy thỏa mãn 100%). Cảm ơn anh rất nhiều.

Rất kinh mong các thày Ndu, Ptm0412,....các anh chị cho thêm ý kiến, giúp em hiểu thêm về vấn đề này nhé.
Nếu bạn vẫn còn lăn tăn thì típ tục nghiên cứu đi, cứ bắt mọi người giải thích thế này chắc... chết. Mà đâu phải cái gì cũng giải thích rõ ràng được đâu mà phải ngẫm, phải có thời gian nghiên cứu, tìm tòi rồi tự nhận ra vấn đề thôi. Ngày xưa tôi cũng bắt sư phụ NDU giải thích công thức rồi nhận được câu trả lời thế này đây :
Mấy cái hàm này hơi trừu tượng chút... Nói đơn giản thì.. đơn giản, nói phức tạp thì.. phức tạp (tùy năng khiếu và khả năng tư duy của mỗi người)
Vậy thì không gì bằng bạn tự mình vắt óc suy nghĩ đi ----> Vượt qua được 1 lần sẽ có lợi cho sự tiến bộ của bạn sau này
Chổ mà bạn cần quan tâm nhất trong công thức trên chính là đoạn 1/COUNTIF($A$1:$A$10,$A$1:$A$10) ---> Cố hiểu xem nó có ý nghĩa gì nhé
Hic... Bắt giải thích từng đoạn 1 chắc... CHẾT
(Cố gắng đi, Excel còn nhiều thứ khó hơn rất nhiều đấy)
Vậy thì chi bằng bạn cũng hãy tự vắt óc mà suy nghĩ đi sẽ có lợi cho bạn sau này. Sau 1 thời gian nghiên cứu tôi thấy công thức mảng hay nhưng ứng dụng trong thực tế ít vì nó chỉ xử lý được 1 khối dữ liệu có hạn, có khi chỉ dùng 1 lần để lấy số liệu làm báo cáo. Nghiên cứu nó chỉ làm tiền để để bạn tư duy cái khác như thuật toán VBA chẳng hạn.
@bebo021999 : Anh giải thích chỗ này chưa thỏa đáng nhé :
Còn vấn đề tại sao LOOKUP không phải ctrl-shift-enter, theo tôi suy luận, nó rà từng trường hợp, khi gặp điều kiện thỏa là trả kết quả luôn.
Nếu giải thích thế này thì có nhiều hàm k phải Ctrl+Shift+Enter lắm anh zai ạ!
 
Còn vấn đề tại sao LOOKUP không phải ctrl-shift-enter, theo tôi suy luận, nó rà từng trường hợp, khi gặp điều kiện thỏa là trả kết quả luôn.
Nếu bạn trungvdb còn băn khoăn trăn trở thế thì nên xem bài viết sau nhé, bài viết cũng của hoamattroicoi, tôi thấy khá là tổng quan và bản chất về công thức mảng, -- chỉ khi ta hiểu bản chất vấn đề thì ta sẽ giải thích được tại sao ngay (vì nó là căn nguyên mà), bạn xem link sau nhé
http://www.giaiphapexcel.com/forum/showthread.php?51717-Hỏi-về-Ctrl-shift-Enter&p=327151#post327151
 
Các bạn chú ý "CÔNG THỨC MẢNG" VÀ "HÀM MẢNG" là hai dạng khác nhau nhé!

+ Hàm mảng là bản thân nó trả về một mảng, ví dụ hàm Table() trong Excel. Kết quả của hàm mảng PHẢI là một mảng.
+ Công thức mảng là công thức - biểu thức tính toán, sự phối hợp các toán tử tính toán và các hàm. Công thức mảng nó xử lý các đối số (tham số) là mảng trong các hàm. Kết quả trả về có thể là mảng hoặc không phải mảng. Để một công thức thành công thức mảng, nhấn CTRL+SHIFT+ENTER, trong VBA dùng thuộc tính FormulaArray để gán công thức.

Nguyên lý của công thức mảng tôi đã viết cách đây 6 năm ở bài này, bạn đọc kỹ và test ví dụ nhỏ trong bài đó bạn sẽ hiểu hơn về bản chất, khi nắm được bản chất rồi bạn sẽ tự xử lý được vấn đề về mảng.

http://www.giaiphapexcel.com/forum/...à-Công-thức-mảng-Phép-tính-có-nhiều-điều-kiện
 
Thực ra em đã đọc các bài trên diễn đàn, thậm chí em có thể vận dụng, tự làm được 1 số bài bài cụ thể nhưng chưa hiểu hết về bản chất vấn đề

Xin nhờ thày Tuân chỉ giúp em đi thẳng vào tình huống cụ thể trong trường hợp này: Tại sao nói hàm Match không phải là hàm mảng mặc dù cú pháp của nó

MATCH(lookup_value,lookup_array,match_type)

thành phần thứ 2 (bôi đỏ) là Array

(Trong khi đó lookup lại là hàm mảng)?
 
Lần chỉnh sửa cuối:
Thực ra em đã đọc các bài trên diễn đàn, thậm chí em có thể vận dụng, tự làm được 1 số bài bài cụ thể nhưng bản chất chưa hiểu hết về bản chất vấn đề

Xin nhờ thày Tuân chỉ giúp em đi thẳng vào tình huống cụ thể trong trường hợp này: Tại sao nói hàm Match không phải là hàm mảng mặc dù cú pháp của nó

MATCH(lookup_value,lookup_array,match_type)

thành phần thứ 2 (bôi đỏ) là Array

(Trong khi đó lookup lại là hàm mảng)?

Cả hai hàm Match, Lookup đều không phải là hàm mảng! Chúng có thể tham gia trong một công thức mảng mà thôi. Không phải trong hàm có đối số là mảng thì hàm đó gọi là hàm mảng đâu, bạn đọc kỹ giải thích ở bài trên của tôi sẽ rõ hơn. Các hàm tìm kiếm thường đối số trong nó là mảng để phục vụ cho việc tìm kiếm, sau khi tìm được thì trả về một giá trị nào đó.

+ Hàm mảng là hàm trả về giá trị là dạng mảng khi nhấn ENTER hoặc chạy hàm.
+ Công thức mảng là công thức có thể trả về một giá trị hoặc mảng nhưng chỉ khi nó được nhấn CTRL+SHIFT+ENTER. Khi nhấn CTRL+SHIFT+ENTER Excel thực hiện việc tính toán trên từng dòng của mảng ở các tham số trong hàm....Bạn hãy đọc bài SUMPRODUCT và Công thức mảng - Phép tính có nhiều điều kiện

Đang viết thì tôi bận mất rồi. Bài viết sau tôi sẽ nói rõ hơn và có ví dụ cho bạn.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom