Hỏi về công thức mảng 1 chiều, mảng 2 chiều (bạn nào đang tìm hiểu về vấn đề này vào đây thảo luận cho vui)

Liên hệ QC

Binbo2020

Thành viên tích cực
Tham gia
10/11/11
Bài viết
955
Được thích
961
Mình xin phép được chuyển tiếp bài này sang đây để sau này ai muốn tìm cũng dễ và mình cũng đang có nhiều vấn đề thắc mắc về mảng để hỏi không bị loãng bài cũ. Bài toán tìm kiếm như trên hình
1622431218290.png
Tạo 1 mảng 2 chiều với 2 hàng để làm bảng dò: hàng 1 chính là hàng so khớp mã SKU, đồng thời "nhân bản" dòng đó thành hàng thứ 2 nhưng lệch 1 cột về cột sau. (Gợi ý: dùng hàm "tung hoành" thiên hạ là được :)).
Cái đoạn này thì mình hiểu nhưng mình chưa biết hàm nào dùng để tạo mảng kiểu này (tạo mảng mới theo điều kiện). Chỉ biết dùng như cũ trên cơ sở hàm index viết lại như này:
Mã:
D13=INDEX(($F$2:$L$4;$G$2:$N$4);MATCH(C8;$C$2:$C$4;0);COLUMN($A$1:$H$1);{1;2})
Nhưng dùng mảng khi tạo như này để lấy ra giá trị đúng vẫn phải tìm dòng cột vì lookup không được do bảng chưa được sắp xếp, hlookup cũng không (chắc không được viết bảng dò kiểu này)
Bài này có công thức khác gọn gàng hơn, liên quan đến tạo mảng 2 chiều, và chỉ dùng duy nhất 1 lần MATCH(B6,'File Ảnh'!$B$2:$B$3,0)
Càng đi càng thấy xa rời câu này quá vì đang hình dung phải mất một match tìm dòng, một hàm tạo mảng và một hàm tìm kiếm.
Lần mò mãi không được lại lần ra cách củ chuối ngắn hơn ban đầu viết một tí

HTML:
H8=LOOKUP("ZZZZZ";INDEX(IF((C8&D8=$C$2:$C$4&$F$2:$M$4);$G$2:$M$4);MATCH(C8;$C$2:$C$4;0)))
 

File đính kèm

  • Bai toan ve mang.xlsx
    10.1 KB · Đọc: 26
Mình xin phép được chuyển tiếp bài này sang đây để sau này ai muốn tìm cũng dễ và mình cũng đang có nhiều vấn đề thắc mắc về mảng để hỏi không bị loãng bài cũ. Bài toán tìm kiếm như trên hình
View attachment 259739

Cái đoạn này thì mình hiểu nhưng mình chưa biết hàm nào dùng để tạo mảng kiểu này (tạo mảng mới theo điều kiện). Chỉ biết dùng như cũ trên cơ sở hàm index viết lại như này:
Mã:
D13=INDEX(($F$2:$L$4;$G$2:$N$4);MATCH(C8;$C$2:$C$4;0);COLUMN($A$1:$H$1);{1;2})
Nhưng dùng mảng khi tạo như này để lấy ra giá trị đúng vẫn phải tìm dòng cột vì lookup không được do bảng chưa được sắp xếp, hlookup cũng không (chắc không được viết bảng dò kiểu này)

Càng đi càng thấy xa rời câu này quá vì đang hình dung phải mất một match tìm dòng, một hàm tạo mảng và một hàm tìm kiếm.
Lần mò mãi không được lại lần ra cách củ chuối ngắn hơn ban đầu viết một tí

HTML:
H8=LOOKUP("ZZZZZ";INDEX(IF((C8&D8=$C$2:$C$4&$F$2:$M$4);$G$2:$M$4);MATCH(C8;$C$2:$C$4;0)))
Cũng không biết nên thảo luận thế nào, chỉ là góp vui công thức
Mã:
=VLOOKUP(C8,$C$2:$M$4,MATCH(D8,INDEX($F$2:$M$4,MATCH(C8,$C$2:$C$4,0),),0)+4,0)
 
Cũng không biết nên thảo luận thế nào
Cái này cũng gần giống cái mình dùng index match ở cột E.
Mình đang mò ở chỗ chuyển nó thành một mảng 2 dòng có một dòng là điều kiện tìm và một dòng là kết quả như gợi ý 1622443561385.png như trong file mò mãi mới ra cách viết
D13=INDEX(($F$2:$L$4;$G$2:$N$4);MATCH(C8;$C$2:$C$4;0);COLUMN($A$1:$H$1);{1;2})
Không biết về cách viết hàm lấy ra mảng như này còn cách nào nữa không vì dùng như này hàm Hlookup không cho dùng kiểu này, lookup thì dữ liệu không sắp xếp không dùng được, làm đến đây thì tắc :''"
 
Mình xin phép được chuyển tiếp bài này sang đây để sau này ai muốn tìm cũng dễ và mình cũng đang có nhiều vấn đề thắc mắc về mảng để hỏi không bị loãng bài cũ. Bài toán tìm kiếm như trên hình
View attachment 259739

Cái đoạn này thì mình hiểu nhưng mình chưa biết hàm nào dùng để tạo mảng kiểu này (tạo mảng mới theo điều kiện). Chỉ biết dùng như cũ trên cơ sở hàm index viết lại như này:
Mã:
D13=INDEX(($F$2:$L$4;$G$2:$N$4);MATCH(C8;$C$2:$C$4;0);COLUMN($A$1:$H$1);{1;2})
Nhưng dùng mảng khi tạo như này để lấy ra giá trị đúng vẫn phải tìm dòng cột vì lookup không được do bảng chưa được sắp xếp, hlookup cũng không (chắc không được viết bảng dò kiểu này)

Càng đi càng thấy xa rời câu này quá vì đang hình dung phải mất một match tìm dòng, một hàm tạo mảng và một hàm tìm kiếm.
Lần mò mãi không được lại lần ra cách củ chuối ngắn hơn ban đầu viết một tí

HTML:
H8=LOOKUP("ZZZZZ";INDEX(IF((C8&D8=$C$2:$C$4&$F$2:$M$4);$G$2:$M$4);MATCH(C8;$C$2:$C$4;0)))
Cách bạn sử dụng Lookup() rất hay! Không gọi là "củ chuối" được!
Tôi trân trọng những sản phẩm từ sự tự tư duy sáng tạo. Hoan hô bạn đã chịu khó dày công tìm tòi! :clap::clap::clap:
Tuy nhiên, Véc-tơ chỉ hướng trong Lookup() bạn dùng cũng chỉ là mảng 1 chiều.

Do bạn chưa quen tìm với những hàm khác và thói quen của bạn vẫn dùng Index() nên tìm chưa ra.
  • Index() bị bó hẹp trong 1 phạm vi cố định cho trước, không thể nào "tung hoành" thiên hạ được! và rất khó xoay xở để tạo thành mảng 2 chiều tùy biến theo ý mình được.
  • Offset() thì mới làm được chuyện này và nó chỉ bị hạn chế trong phạm vi chính là giới hạn của bảng tính mà thôi! Bạn chịu khó mày mò thêm về hàm này sẽ thấy nhiều điều thú vị khác nữa.
Đây là công thức của tôi:
Mã:
H8=HLOOKUP(D8,T(OFFSET($C$1,MATCH(C8,$C$2:$C$4,),COLUMN(A:Z)+{0;1})),2,)
CSE.

Chúc bạn ngày vui.
/-*+//-*+//-*+/
 

File đính kèm

  • Bai toan ve mang.xlsx
    12.3 KB · Đọc: 19
Offset() thì mới làm được chuyện này và nó chỉ bị hạn chế trong phạm vi chính là giới hạn của bảng tính mà thôi! Bạn chịu khó mày mò thêm về hàm này sẽ thấy nhiều điều thú vị khác nữa.
Hàm này thực sự mình chỉ đọc qua chứ chưa tìm hiểu sâu về nó, thấy nó cứ gần gần như index nên cứ tưởng giống nhau nên gặp bài toàn bỏ qua hàm này.
Để mình đọc thêm và áp dụng thử xem sao.
Cám ơn bạn rất nhiều.
 
Cho mình hỏi một chút là mảng và vùng khác nhau như nào nhỉ, hai cái này vẫn mù mờ không hiểu mà tìm tài liệu mãi không thấy. Bạn nào biết chỉ mình cái này với không phân biệt được nên nhiều khi khó vận dụng
 
Cho mình hỏi một chút là mảng và vùng khác nhau như nào nhỉ, hai cái này vẫn mù mờ không hiểu mà tìm tài liệu mãi không thấy. Bạn nào biết chỉ mình cái này với không phân biệt được nên nhiều khi khó vận dụng
Từ "vùng" có phải trong từ "bốn vùng chiến thuật" không ?
 
Từ "vùng" có phải trong từ "bốn vùng chiến thuật" không ?
Đơn giản như bài sáng nay gặp hàm này: WEEKNUM($B$3:$D$13+0) nếu không có cộng 0 thì nó báo lỗi nếu có thì mới chạy, bôi đen bên trong bấm F9 thì ra kết quả như nhau mà không hiểu tại sao. Chỉ hiểu nôm na là một cái được ghi ra ở dòng cột trên excel còn một cái được tính toán và lưu trong bộ nhớ của excel. Chẳng biết hiểu thế đúng chưa. Nhiều lúc gặp dạng bài kiểu này mà chỉ biết mò chứ không hiểu được bản chất là tại sao lại phải làm thế.
 
Đơn giản như bài sáng nay gặp hàm này: WEEKNUM($B$3:$D$13+0) nếu không có cộng 0 thì nó báo lỗi nếu có thì mới chạy, bôi đen bên trong bấm F9 thì ra kết quả như nhau mà không hiểu tại sao. Chỉ hiểu nôm na là một cái được ghi ra ở dòng cột trên excel còn một cái được tính toán và lưu trong bộ nhớ của excel. Chẳng biết hiểu thế đúng chưa. Nhiều lúc gặp dạng bài kiểu này mà chỉ biết mò chứ không hiểu được bản chất là tại sao lại phải làm thế.
Trường hợp nầy liên quan gì tới từ "vùng" ?
 
Trường hợp nầy liên quan gì tới từ "vùng" ?
Chính vì không hiểu nên mới hỏi mà, nghe các từ bảng, vùng, mảng dùng nhiều mà không phân biệt được nên cũng không biết ví dụ như nào cả
Bài đã được tự động gộp:

Từ trước tới giờ học excel toàn tự mò trên mạng, chưa qua lớp nào bao giờ nên không có gốc
 
Chính vì không hiểu nên mới hỏi mà, nghe các từ bảng, vùng, mảng dùng nhiều mà không phân biệt được nên cũng không biết ví dụ như nào cả
Bài đã được tự động gộp:

Từ trước tới giờ học excel toàn tự mò trên mạng, chưa qua lớp nào bao giờ nên không có gốc
Rất nhiều trường hợp mình cũng không phân biệt các từ bảng, vùng, mảng gì gì đó
 
Chào mọi người, hiện mình mới nhập môn excel, mọi người có thể hỗ trợ mình 1 bài toán như sau được không:
Mình có dữ liệu bảng giá như thế này làm sao mình xác định được giá lần 1,2,3,4,5,...,N trong khoảng thời gian xác định cho trước
1622733281022.png
Ví dụ:
Mình có đơn hàng mua ngày 21/02/2021 thì làm sao để có thể lấy được giá 9800 như trên bảng, mọi người giúp mình với ạ :(
 
Chào mọi người, hiện mình mới nhập môn excel, mọi người có thể hỗ trợ mình 1 bài toán như sau được không:
Mình có dữ liệu bảng giá như thế này làm sao mình xác định được giá lần 1,2,3,4,5,...,N trong khoảng thời gian xác định cho trước
View attachment 259992
Ví dụ:
Mình có đơn hàng mua ngày 21/02/2021 thì làm sao để có thể lấy được giá 9800 như trên bảng, mọi người giúp mình với ạ :(
Bạn gửi file lên đi.
 
Đơn giản như bài sáng nay gặp hàm này: WEEKNUM($B$3:$D$13+0) nếu không có cộng 0 thì nó báo lỗi nếu có thì mới chạy, bôi đen bên trong bấm F9 thì ra kết quả như nhau mà không hiểu tại sao. Chỉ hiểu nôm na là một cái được ghi ra ở dòng cột trên excel còn một cái được tính toán và lưu trong bộ nhớ của excel. Chẳng biết hiểu thế đúng chưa. Nhiều lúc gặp dạng bài kiểu này mà chỉ biết mò chứ không hiểu được bản chất là tại sao lại phải làm thế.
Bạn tìm định nghĩa "mảng" trong tài liệu của anh Trần Thanh Phong theo link:

Chỉ đề cập đến "mảng" trong công thức mảng, không dám lạm bàn đến "mảng" trong VBA, thì theo tôi hiểu như sau:
  • Vùng (Range): là tập hợp nhiều ô hiện hữu trên bảng tính, có địa chỉ 'tham chiếu' rõ ràng, như Vd của bạn: "B3: D13".
  • Mảng (Array): là tập hợp nhiều ô hiện hữu trong bộ nhớ và không có địa chỉ tham chiếu.
Đại khái trong công thức mảng, 'Vùng' sau khi tính toán: cộng, trừ, nhân, chia, hay đếm hoặc cắt trích, phân mảnh theo điều kiện lọc thì trở thành 'Mảng', muốn 'Mảng' hiện hữu trên bảng tính thì bạn phải chọn vùng bất kỳ có số dòng-cột bằng kích thước mảng nhập công thức và kết thúc bằng CSE.

Có nhiều hàm chấp nhận trong đối số (cú pháp) của nó là 'Mảng', như: Sumproduct(), Small(), Large(), Aggregate(), Frequency(), Mmult()..v.v, bạn nên xem kỹ quy định và những lưu ý liên quan đến cú pháp của hàm để nắm rõ hơn. Có vài hàm chỉ chấp nhận 'Vùng' không chấp nhận 'Mảng', trong đối số của nó ghi rõ là 'Range' như họ Countif và Sumif.

Vì vậy, khi kết hợp hàm bạn phải nắm kỹ quy định trong cú pháp từng hàm một, cũng như kết quả trả về của nó là gì? 1 giá trị (như Min, Max, Sum, Sumproduct, Median...) hay có thể được nhiều giá trị (như Frequency, Mmult...)? là 'Vùng' hay là 'Mảng' như trường hợp của hàm Offset().

Nói thêm về Offset(): không kể kết quả là 1 ô hiện hữu trên bảng tính, nếu kết quả có phạm vi là 1 vùng nguyên (liên tục giữa các ô) không phải do lắp ghép rời rạc thì nó trả về 'Vùng', ngoài đó ra thì nó trả về 'Mảng'. Ví dụ: bạn có thể xem hai công thức dùng Offset() bài #9 và #10 trong chủ đề:
Đăng bài trong chủ đề 'Chơi Sudoku bằng Excel' https://www.giaiphapexcel.com/diendan/threads/chơi-sudoku-bằng-excel.155663/post-1028242

Do tôi biết rằng khi tham chiếu dòng cột hiện hữu trên bảng tính và là khối nguyên, Offset() sẽ trả về 'Vùng', nên tôi đưa thẳng vào đối số 'Vùng tham chiếu' của Countif(), mà không cần dùng kết hợp Sum(Countif('ô đơn', 'mảng')) để đếm.

Nói về 'mảng' trong công thức mảng còn nhiều lắm bạn, như có lúc cần nhấn CSE có lúc không, có lúc dùng được Index(...,) để thay CSE, có lúc không bao giờ được, tất cả là do mảng đó là 'mảng hằng số', mảng nguyên, hay 'mảng phân mảnh lắp ghép'..v.v.

Bạn cứ thao tác nhiều về công thức mảng, phải tự tìm hiểu rồi tự nhận xét tự đúc kết sẽ có nhiều kinh nghiệm về nó mà thôi! Chứ nếu muốn lục lọi tài liệu nói rõ về 'công thức mảng' trên diễn đàn chỉ thiên về VBA này, ngoài tài liệu của anh Trần Thanh Phong như link trên, thì bạn đang làm việc 'mò kim đáy bể'.

Chúc bạn ngày vui.
/-*+//-*+//-*+/
 
tài liệu của anh Trần Thanh Phong theo link:
Oái sao lại quên mất trên GPE của mình có tài liệu này mà nhỉ.
1622771344825.png
Trước mới học Excel toàn dùng file 2005 của Trần Quang Hải chỉ có hàm nên quên mất file này còn có cả định nghĩa. Lại có thêm cái để nghiền ngẫm bao giờ không ra lại lên hỏi tiếp :''" .
Cám ơn bạn nhiều.
Bài đã được tự động gộp:

Quên để lại đường dẫn cho bạn nào đọc mà không biết cuốn này ở đâu: https://www.giaiphapexcel.com/diendan/threads/ebook-công-thức-và-hàm-excel.11627/
 
Web KT
Back
Top Bottom