Vận dụng công thức mảng để tính FIFO
Thấy dụ về cách tính FIFO của chị handung107 quá hay nên post lại cho các
bạn tham khảo về cách sử dụng mảng (array).
(P/S : Xin lỗi các bạn, vì tôi không tìm thấy File minh họa này đâu nữa, nên c
bạn cố gắng theo dõi bài viết này - Handung107)
Đây 1 dụ xuất sắc về cách sử dụng mảng một cách linh hoạt. Tôi xin mạn
phép tác gipost lại đoạn tả cách tính FIFO (không phải của tôi, chỉ dịch lại
cho các bạn tham khảo thôi. Tôi chỉ thêm phn giải thích cách tính cho thêm khí
thế).
Tôi biết phần lớn các bạn đây đều rất rành vmảng, nhưng sợ một vài bạn mới
làm quen với excel chưa biết hết. Vì vậy tôi xin được phép đi cụ thể từng bước
một.
Gisử ta bảng sau: cột 1 là tên Sản phẩm (A), cột 2 là slượng hàng mua/bán
(sâm là bán, sdương mua). Tạm đặt thên cột này Q (tương ứng với khối
$B$1:$B$30). Cột 3 giá mua/bán, đặt tên P (tương ứng với khối
$C$1:$C$30).
(Tôi không được phép post file nên không file cho các bạn tham khảo, tuy
nhiên các bạn có thể copy và paste vào trong excel).
Dòng đầu tiên bao giờ cũng là số dương (số mua mới hoặc số đầu kỳ).
A..... 5..... 1.0
A..... 5..... 1.1
A..... -3..... 1.3
A..... 2...... 1.3
A...... -2.....1.4
A..... 2.....1.2
A..... 4..... 1.3
A..... -3..... 1.6
A..... 4..... 1.4
A..... 2..... 1.4
A..... -2..... 1.6
A..... 1..... 1.2
A..... 3..... 1.7
A..... 3..... 1.2
A..... 1..... 1.4
A..... -5..... 1.3
A..... -4..... 1.8
A..... 3..... 1.8
A..... -3..... 1.9
A..... 5..... 1.4
chúng ta có những công thức như sau:
Tại ô D1: nhập số 1
E1:
=B1
Chúng ta làm 2 cột trung gian: cột E: Số lượng hàng tồn kho của đợt hàng lâu nht
(cái thằng First in ấy).
Cột D: vị trí của số hàng tồn kho lâu nhất, dụ: tại dòng s 6, do đã tiêu thhết
số hàng nhập về lần đầu tiên (5 cái), nên số hàng tồn kho lâu nhất sẽ là dòng s2.
Để tính các cột D, E, ta nhập các công thức sau:
Tôi giả sử đang ở dòng s6, ta nhập:
Cột D (trừ ô D1 đã nhập số 1): nhớ đây là công thức mảng nhé. Bạn nhớ nhấn tổ
hợp Ctrl+Shift+Enter.
{=MATCH(TRUE,MMULT(--(ROW(Q)>=TRANSPOSE(ROW(Q))),(Q>0)*Q)
+SUMIF(OFFSET( Q,0,0,ROW()-1,1),"<0")>0,0)}
Các bạn chưa quen với công thức mảng chú ý một chút, hơi tốn công nhưng lại
có nhiều lợi ích về sau
Tôi tách cái công thức rối mù ở trên ra làm nhiều mảnh để dễ theo dõi.
1. Khối hàm Offset: trong công thức trên, m offset đóng vai trò 1 trích một khối
con trong khối Q. dụ nếu lúc này bạn đang ô D6, thì khối được trích sẽ là
B1:B5
2. Khối SUMIF(OFFSET(Q,0,0,ROW()-1,1),"<0"): Hàm SumIf s lấy tổng của
các sâm trong khối B1:B5 (tức là tổng số hàng xuất ra). Trong công thức, khối
SUMIF đóng vai trò 1 hằng số (sẽ thấy rõ hơn vài trò này ở phần sau).
3. Khối MMULT(--(ROW(Q)>=TRANSPOSE(ROW(Q))),(Q>0)*Q): Cái này hay
nhất đây. Tác giả sử dụng rất nhiều "mánh lới" trong công thức trên
Đầu tiên: (ROW(Q)>=TRANSPOSE(ROW(Q)): Đây mánh đtạo ra 1 mảng có
số dòng bằng với số cột, trong đó giá trị toàn TRUE
Thhai: Hai dấu trừ liên tiếp nhau (--). cũng là 1 "mánh" thông dụng để chuyển
giá trlogic (true/false) thành s (True=1, false=0). Đến đây bạn mảng toàn s
1.
Th ba: (Q>0)*Q: giống "cái gì đây" quá nhỉ. Cái này trích ra mảng toàn s
dương, các số âm bị convert thành số 0. Cái mảng này là:
5
5
0
2
0