Giải thích công thức mảng

Liên hệ QC

adult

Thành viên hoạt động
Tham gia
2/12/07
Bài viết
193
Được thích
30
Xin chào các anh chị,
Em có tìm được 1 file có thể hiện công thức mảng, em có đính kèm. Dù xem tới xem lui nhưng kiến thức hạn hẹp em cũng không hiểu ý nghĩa của công thức mảng đó là gì. Trong trường hợp này không sử dụng công thức mảng có thể sử dụng công thức khác không?
Mong các anh chị giải thích và giúp em lập 1 công thức không liên quan đến mảng nhưng ra kết quả giống nhau.
Cảm ơn các anh chị nhiều
 

File đính kèm

  • Vi du.xlsx
    10.1 KB · Đọc: 14
Xin chào các anh chị,
Em có tìm được 1 file có thể hiện công thức mảng, em có đính kèm. Dù xem tới xem lui nhưng kiến thức hạn hẹp em cũng không hiểu ý nghĩa của công thức mảng đó là gì. Trong trường hợp này không sử dụng công thức mảng có thể sử dụng công thức khác không?
Mong các anh chị giải thích và giúp em lập 1 công thức không liên quan đến mảng nhưng ra kết quả giống nhau.
Cảm ơn các anh chị nhiều
Chào adult,

1. Giải thích: {=C4:C10/D4:D10 / MIN(C4:C10/D4:D10)}
  • C4:C10/D4:D10---> Lấy từng ô thuộc dãy C (từ C4:C10, tức thu nhập), chia cho từng ô thuộc dãy D (từ D4:D10, tức số lượng) ra thu nhập cho 1 đơn vị số lượng làm được. (a)
  • MIN(C4:C10/D4:D10)---> Lấy số nhỏ nhất của toàn bộ kết quả thu nhập cho 1 đơn vị số lượng. (b)
  • (a) / (b) --->Hệ số nhân viên
Do dùng công thức mảng nên không dùng thêm hỗ trợ như: cột phụ để tính toán "số nhỏ nhất (b)"

2. Dùng công thức thường (không liên quan công thức mảng), phải dùng cột phụ, bạn có thể làm như sau:
  • F4=C4/D4, Fill xuống. (tương đương với (a))
  • G4=F4/MIN($F$4:$F$10), Fill xuống, ra "hệ số nhân viên".

Chúc bạn ngày vui.
 
Chào adult,
1. Giải thích: {=C4:C10/D4:D10 / MIN(C4:C10/D4:D10)}
  • C4:C10/D4:D10---> Lấy từng ô thuộc dãy C (từ C4:C10, tức thu nhập), chia cho từng ô thuộc dãy D (từ D4:D10, tức số lượng) ra thu nhập cho 1 đơn vị số lượng làm được. (a)
  • MIN(C4:C10/D4:D10)---> Lấy số nhỏ nhất của toàn bộ kết quả thu nhập cho 1 đơn vị số lượng. (b)
  • (a) / (b) --->Hệ số nhân viên
Do dùng công thức mảng nên không dùng thêm hỗ trợ như: cột phụ để tính toán "số nhỏ nhất (b)"
2. Dùng công thức thường (không liên quan công thức mảng), phải dùng cột phụ, bạn có thể làm như sau:
  • F4=C4/D4, Fill xuống. (tương đương với (a))
  • G4=F4/MIN($F$4:$F$10), Fill xuống, ra "hệ số nhân viên".
Chúc bạn ngày vui.
rảnh vào phá bạn chơi, khà khà dùng Index để khỏi Ctrl+Shift+Enter
ghép 2 công thức lại
Mã:
E4 =C4/D4/MIN(INDEX($C$4:$C$10/$D$4:$D$10,))
chúc bạn tối vui }}}}}}}}}}}}}}}
 
rảnh vào phá bạn chơi, khà khà dùng Index để khỏi Ctrl+Shift+Enter
ghép 2 công thức lại
Mã:
E4 =C4/D4/MIN(INDEX($C$4:$C$10/$D$4:$D$10,))
chúc bạn tối vui }}}}}}}}}}}}}}}
Khà khà khà, }}}}}}}}}}}}}}}

Bởi dzậy mình biết ý mới nhấn mạnh "không liên quan đến công thức mảng" mờ! Hì hì.
Đây không gọi là phá, mà thực chất là một sự hỗ trợ, cùng nhắc nhở của bạn hiền: nên giải thích thấu đáo về mảng cho trường hợp này.
Cảm ơn bạn hiền.

Thật ra, nếu không dùng công thức mảng cho trường hợp này thì công nhận hơi uổng, bạn hiền hén!

Để giải thích thêm cho chủ thớt khỏi hoang mang:
  • Nhóm $C$4:$C$10/$D$4:$D$10 tạo ra một kết quả mảng, do đó khi tạo MIN($C$4:$C$10/$D$4:$D$10) phải nhấn tổ hợp phím Ctrl+Shift+Enter, nhưng khi đặt nó vào INDEX('array',) thì bạn không cần nhấn tổ hợp phím này, Nhờ vào đặc tính của INDEX('array',) với đối số hàng =0, nó sẽ trả về mảng giá trị cột (trích theo hỗ trợ của trang Microsoft: https://support.office.com/vi-vn/ar...ui=vi-VN&rs=vi-VN&ad=VN&fromAR=1#bmarray_form)

Chúc bạn ngày vui và tìm được niềm say mê về công thức mảng. Một "phương thức" gây ám ảnh (hiểu theo cả nghĩa đen và nghĩa bóng) cho nhiều thành viên say mê Excel mà tôi là một trong những số đó. }}}}}}}}}}}}}}}
 
Chào adult,

1. Giải thích: {=C4:C10/D4:D10 / MIN(C4:C10/D4:D10)}
  • C4:C10/D4:D10---> Lấy từng ô thuộc dãy C (từ C4:C10, tức thu nhập), chia cho từng ô thuộc dãy D (từ D4:D10, tức số lượng) ra thu nhập cho 1 đơn vị số lượng làm được. (a)
  • MIN(C4:C10/D4:D10)---> Lấy số nhỏ nhất của toàn bộ kết quả thu nhập cho 1 đơn vị số lượng. (b)
  • (a) / (b) --->Hệ số nhân viên
Do dùng công thức mảng nên không dùng thêm hỗ trợ như: cột phụ để tính toán "số nhỏ nhất (b)"

2. Dùng công thức thường (không liên quan công thức mảng), phải dùng cột phụ, bạn có thể làm như sau:
  • F4=C4/D4, Fill xuống. (tương đương với (a))
  • G4=F4/MIN($F$4:$F$10), Fill xuống, ra "hệ số nhân viên".

Chúc bạn ngày vui.
Cảm ơn bạn nhiều, sau khi dùng công thức bình thường và đọc diễn giải của bạn thì mình đã hiểu cách công thức đó vận hành như thế nào. Quả thật công thức mảng quá hay.
 
rảnh vào phá bạn chơi, khà khà dùng Index để khỏi Ctrl+Shift+Enter
ghép 2 công thức lại
Mã:
E4 =C4/D4/MIN(INDEX($C$4:$C$10/$D$4:$D$10,))
chúc bạn tối vui }}}}}}}}}}}}}}}
Mình nghe nói nếu dùng công thức mảng sẽ làm chậm quá trình tính toán của file excel. Vậy nếu dùng Index như công thức này có tối ưu hơn không bạn? Cảm ơn bạn đã chia sẽ thêm 1 cách lập công thức hay nhé.
 
Cảm ơn bạn nhiều, sau khi dùng công thức bình thường và đọc diễn giải của bạn thì mình đã hiểu cách công thức đó vận hành như thế nào. Quả thật công thức mảng quá hay.
Chào adult,

Bạn may mắn gặp phải công thức mảng chưa phức tạp, càng dấn thân vào "vùng đất huyền bí" này, lắm lúc bạn sẽ "điên lên" vì nó, vừa thương: vì kết quả gọn gàng và "ngoài mong đợi", vừa ghét: vì khó quản thúc nó không như cách sử dụng công thức bình thường.

Nó như một chú ngựa chứng vậy, một khi bạn đã "thuần phục" nó theo ý mình, thì sẽ có biết bao điều hay mà trước nay bạn phải chật vật khi xử lý dữ liệu.

Đã giúp thì sẵn tiện giúp cho cùng: để biết chú "ngựa chứng" này chạy như thế nào bạn dùng 2 công cụ sau:


  1. Kéo chuột chọn vào đoạn công thức nào đó (Vd: bạn chọn $C$4:$C$10/$D$4:$D$10), xong nhấn F9, bạn sẽ thấy kết quả của đoạn hàm trả về. Nhấn Esc thoát ra vào chọn đoạn hàm khác, Vd: MIN(INDEX($C$4:$C$10/$D$4:$D$10,), bạn cũng làm như trên sẽ thấy kết quả của đoạn hàm vừa chọn.
  2. Cách khác, đứng tại ô chứa công thức mảng (hoặc bất kỳ công thức nào khác), vào Menu: Formulas\Evaluate Formula, nó sẽ diễn từng lần kết quả máy tính toán trong cửa sổ khi bạn nhấn tuần tự từng lần một vào nút "Evaluate", từ đầu cho đến ra kết quả.

Chúc bạn học tập vui với công thức mảng cùng gia đình GPE. }}}}}}}}}}}}}}}
 
Mình nghe nói nếu dùng công thức mảng sẽ làm chậm quá trình tính toán của file excel. Vậy nếu dùng Index như công thức này có tối ưu hơn không bạn? Cảm ơn bạn đã chia sẽ thêm 1 cách lập công thức hay nhé.
Khi thực hiện công thức mảng, nó sẽ ghi nhận vào trong bộ nhớ 1 vùng mảng nên chắc chắn rằng nó ảnh hưởng và sẽ làm chậm quá trình tính toán của file Excel, do đó tùy theo dữ liệu của bạn nhiều ít mà nó chiếm bộ nhớ ít hay nhiều --=0, tôi ví dụ: như công thức của bạn gửi thì MIN(($C$4:$C$10/$D$4:$D$10) , chỉ có 2 vùng 7 hàng, tạo ra mảng 1 chiều chứa 7 hàng hiển hiện cùng lúc trong bộ nhớ thì không là vấn đề, nhưng nếu là C4:C2003/D4:D2003 thì mảng chứa 2000 thành phần của mảng hiển hiện cùng lúc trong bộ nhớ thì bạn sẽ thấy máy "hơi hơi" chậm, nếu file còn chứa các công thức khác có chứa lấy vùng dữ liệu như VLOOKUP(), SUMIF(), COUNTIF()..... hoặc công thức mảng khác, thì chỉ cần dữ liệu 1000 dòng thôi đủ cho bạn ngồi "uống café, húc thuốc, rung đùi...." chờ ra kết quả mòn mỏi. Hì hì. Cho nên, tùy nghi dựa vào thực tế dữ liệu mà bạn có hướng sử dụng thích hợp, thái quá hay bất cập lạm dụng nó đều không hay.

Riêng INDEX(...,) chỉ giúp bạn đỡ phải lo có nhấn hay không nhấn Ctrl+Shift+Enter thôi, tuy nhiên nó cũng không phải vạn năng, tỷ như nó không tác dụng lên IF(đk,"kết quả/vùng thỏa đk đúng","kết quả/vùng thỏa đk sai").

Chúc bạn ngày vui.
 
Chào adult,

Bạn may mắn gặp phải công thức mảng chưa phức tạp, càng dấn thân vào "vùng đất huyền bí" này, lắm lúc bạn sẽ "điên lên" vì nó, vừa thương: vì kết quả gọn gàng và "ngoài mong đợi", vừa ghét: vì khó quản thúc nó không như cách sử dụng công thức bình thường.

Nó như một chú ngựa chứng vậy, một khi bạn đã "thuần phục" nó theo ý mình, thì sẽ có biết bao điều hay mà trước nay bạn phải chật vật khi xử lý dữ liệu.

Đã giúp thì sẵn tiện giúp cho cùng: để biết chú "ngựa chứng" này chạy như thế nào bạn dùng 2 công cụ sau:


  1. Kéo chuột chọn vào đoạn công thức nào đó (Vd: bạn chọn $C$4:$C$10/$D$4:$D$10), xong nhấn F9, bạn sẽ thấy kết quả của đoạn hàm trả về. Nhấn Esc thoát ra vào chọn đoạn hàm khác, Vd: MIN(INDEX($C$4:$C$10/$D$4:$D$10,), bạn cũng làm như trên sẽ thấy kết quả của đoạn hàm vừa chọn.
  2. Cách khác, đứng tại ô chứa công thức mảng (hoặc bất kỳ công thức nào khác), vào Menu: Formulas\Evaluate Formula, nó sẽ diễn từng lần kết quả máy tính toán trong cửa sổ khi bạn nhấn tuần tự từng lần một vào nút "Evaluate", từ đầu cho đến ra kết quả.

Chúc bạn học tập vui với công thức mảng cùng gia đình GPE. }}}}}}}}}}}}}}}
WAo, mình làm thử thấy dễ hiểu vô cùng, rất trực quan sinh động. Chắc bạn phải mất nhiều thời gian ăn ngủ với excel mới biết nhiều chiêu hay như vậy nhỉ.
 
WAo, mình làm thử thấy dễ hiểu vô cùng, rất trực quan sinh động. Chắc bạn phải mất nhiều thời gian ăn ngủ với excel mới biết nhiều chiêu hay như vậy nhỉ.
Một khi bạn yêu ai thì cũng vậy thôi, "mất ăn - mất ngũ - khổ sở - điêu đứng - ra khóc - vào cười" để được có người mình yêu.

Các chiêu tôi trình bày lại với bạn, đó cũng nhờ các anh chị, bạn bè chiến hữu GPE đi trước chỉ bảo thôi bạn à! Nói chung là nhờ vào "gia đình GPE" mà tôi có chút kiến thức lành mạnh và hữu hiệu như vậy.

Không chừng nếu có duyên phận tôi còn phải "đấu chưởng pháp" sau này với bạn nữa. Khà khà khà


Chúc bạn ngày vui. }}}}}}}}}}}}}}}
 
Mình nghe nói nếu dùng công thức mảng sẽ làm chậm quá trình tính toán của file excel. Vậy nếu dùng Index như công thức này có tối ưu hơn không bạn? Cảm ơn bạn đã chia sẽ thêm 1 cách lập công thức hay nhé.
dùng Index trong công thức mảng có lợi là không cần nhấn Ctrl+Shift+Enter
còn chạy nhanh hơn không? mình chưa kiểm chứng, nhưng mình nghĩ là nhanh hơn vì sử dụng thuật toán gốc của Excel, còn Ctrl+Shift+Enter là tùy biến cộng thêm cho người dùng nên phải qua các bước trung gian
 
dùng Index trong công thức mảng có lợi là không cần nhấn Ctrl+Shift+Enter
còn chạy nhanh hơn không? mình chưa kiểm chứng, nhưng mình nghĩ là nhanh hơn vì sử dụng thuật toán gốc của Excel, còn Ctrl+Shift+Enter là tùy biến cộng thêm cho người dùng nên phải qua các bước trung gian
Dùng Index(,) để không phải CTrl+Shift+Enter thực chất như 1 cái mặt nạ, để che giấu đi mình đang sử dụng công thức mảng, chứ không thể thay đổi bản chất nó được nên tốc độ nó vẫn vậy, trên các diễn đàn lớn excel nước ngoài ít ai sử dụng index(,) lắm, vì họ muốn cho người dùng biết đây làm hàm mảng, anh có thể lên forum của mrexcel để tìm hiểu!!!
 
Chào adult,

Tôi hơi "ganh tị" với bạn đó! --=0

Có đầy đủ mặt các "pháp sư" HieuCD, eke_rula hướng dẫn về công thức mảng là bạn quá may mắn rồi.

Khà khà khà. }}}}}}}}}}}}}}}

Chúc anh em chiến hữu ngày thiệt là vui và năng động.
 
Dùng Index(,) để không phải CTrl+Shift+Enter thực chất như 1 cái mặt nạ, để che giấu đi mình đang sử dụng công thức mảng, chứ không thể thay đổi bản chất nó được nên tốc độ nó vẫn vậy, trên các diễn đàn lớn excel nước ngoài ít ai sử dụng index(,) lắm, vì họ muốn cho người dùng biết đây làm hàm mảng, anh có thể lên forum của mrexcel để tìm hiểu!!!
đúng là không nhanh hơn
 
Lần chỉnh sửa cuối:
. . . . . . . . . . . . . . . . . . . .
 
Lần chỉnh sửa cuối:
Chào adult,

Tôi hơi "ganh tị" với bạn đó! --=0

Có đầy đủ mặt các "pháp sư" HieuCD, eke_rula hướng dẫn về công thức mảng là bạn quá may mắn rồi.

Khà khà khà. }}}}}}}}}}}}}}}

Chúc anh em chiến hữu ngày thiệt là vui và năng động.

Lần này trong 3 người, có ai hy vọng được gọi Master HieuCD/eke_rula/quocgiacan hôn ta?
 
Lần này trong 3 người, có ai hy vọng được gọi Master HieuCD/eke_rula/quocgiacan hôn ta?
Khà khà khà,

Danh hiệu "Thầy" đã thuộc về thầy NDU rồi, nên 3 anh em không có ai dám "lộn xộn" giành ngôi đâu anh.

Ba anh em thương nhau hổng hết anh ạ! chỉ mon men đàm luận "chén trà câu chuyện" về mảng thôi anh.

Chúc anh ngày thiệt vui.
 
Khà khà khà,

Danh hiệu "Thầy" đã thuộc về thầy NDU rồi, nên 3 anh em không có ai dám "lộn xộn" giành ngôi đâu anh.

Ba anh em thương nhau hổng hết anh ạ! chỉ mon men đàm luận "chén trà câu chuyện" về mảng thôi anh.

Chúc anh ngày thiệt vui.

Tôi chỉ đùa thôi. Chuyện ngôn ngữ giao tiếp nó hơi lộn xộn 1 chút, và tiêng Anh nó cũng không ngoại lệ. Trong cách gọi "Master TênNgười" thì từ Master không có nghĩa là "Thầy". Thực ra nó có nghĩa là "cậu", dùng để gọi người nhỏ tuổi (dưới 16).

(*) cái vụ này, có bạn đã bị "dính chấu" rồi, và tôi cũng có giải thích rõ trong bài ấy.
 
Tôi chỉ đùa thôi. Chuyện ngôn ngữ giao tiếp nó hơi lộn xộn 1 chút, và tiêng Anh nó cũng không ngoại lệ. Trong cách gọi "Master TênNgười" thì từ Master không có nghĩa là "Thầy". Thực ra nó có nghĩa là "cậu", dùng để gọi người nhỏ tuổi (dưới 16).

(*) cái vụ này, có bạn đã bị "dính chấu" rồi, và tôi cũng có giải thích rõ trong bài ấy.
Khà khà khà, /-*+//-*+//-*+/

Bị sập bẫy của anh rồi!
Nếu theo "chuẩn" như vậy, thì mình chắc thoát khỏi từ "Master 'Tên'" hả anh? vì anh em mình đang đứng hàng U60 rồi. }}}}}}}}}}}}}}}
 
Mình không định share link về phân tích cơ chế làm việc của công thức mảng trong bài này nhưng đọc file Excel của bạn, với ý bạn muốn hiểu bản chất về công thức mảng thì file bạn đưa chỉ là một ví dụ về cách dùng công thức mảng, công thức đó nó không phản ánh hiệu quả thực sự của bài toán, không phản ánh được sự cần thiết hay khi nào thì dùng công thức mảng, vì sao phải CTRL+SHIFT+ENTER. ... Tất cả các vấn đề đó nếu không được giải thích thì bạn hay vô vàn các bạn khác chưa học về công thức mảng mà đọc loạt bài này sẽ hiểu lờ mờ mà không vận dụng được vào công việc sau này. Dưới đây là bài viết tôi đã chia sẻ từ năm 2006 và có nhiều tình huống mà tôi và các cao thủ thực sự đã đóng góp.

Bạn hãy đọc thêm bài này thật kỹ hy vọng sẽ hiểu hơn về phương pháp làm công thức mảng
https://www.giaiphapexcel.com/forum...à-Công-thức-mảng-Phép-tính-có-nhiều-điều-kiện
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom