Tải bản đầy đủ (.pdf) (27 trang)

Giải thích thêm về cách vận dụng các công thức trong File FIFO ppsx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.49 MB, 27 trang )

Giải thích thêm về cách vận dụng
các công thức trong File FIFO

Giả sử ta có bảng dữ liệu sau :

Đầu tiên, ta đặt tên cho mảng $B$4:$B$30 là Q, và mảng $C$4:$C$30 là P, cách
đặt tên như thế nào hoặc các bạn có thể đặt tên cho vùng dữ liệu động, chúng ta sẽ
không bàn tại đây
Yêu cầu cấu trúc của File này là :
- Số lượng Nhấp và Xuất đặt cùng 1 cột và quy ước SLNhap >0, SLXuat <0
- Dữ liệu được nhập theo thứ tự ngày tháng. Hàng trên cùng bao giờ cũng là số >0,
tương ứng với số lượng tồn cuối kỳ, hoặc nhập hàng vào rồi mới xuất bán
Để có thể hiểu được bài này, chúng ta cần nói về một số công thức mảng kết hợp
bởi các hàm sau :
1/ Hàm ROW(Q) : sẽ trả về giá trị là một mảng gồm các số hạng là vị trí các hàng
của các phần tử của mảng Q, tính từ phần tử đầu tiên. Công thức mảng ROW(Q)
sẽ cho như hình dưới đây

2/ Hàm TRANSPOSE(ROW(Q)) : Sẽ cho ta một mảng ngang khác bằng kích
thước với mảng ROW(Q) như hình vẽ sau :
3/ Lệnh ROW(SL)>=TRANSPOSE(ROW(SL)) sẽ xuất ra mảng gồm những phần
tử trong mảng có giá trị là TRUE :
Ta chuyển giá trị TRUE, False sang giá trị 1, 0 bằng cách thêm vào 2 dấu - - như
sau :
{=( (ROW(SL)>=TRANSPOSE(ROW(SL))}, ta sẽ có một mảng gồm giá trị :

Ta gọi mảng trên đây là mảng 1
Bạn hỏi vì sao phải tạo ra mảng này ? Thực ra, phải đi từ mục đích cuối cùng ra.
Mục đích chính là tìm thời điểm (dòng số mấy) của cái gọi là “First in”. Muốn làm
như thế, bắt buộc phải tạo ra một mảng thể hiện tổng số hàng nhập kho, sau đó, trừ
đi xuất kho, ta sẽ tìm được thằng “First in” mới.


Bạn hãy xem mảng (Q>0)*Q sẽ cho ra các phần tử nào nhé :
5
5
0
2
0
2
0
0
4
2
0
1
3
3
1
0
0
3
0
5
3
0
0
0
0
0

Đây chính là mảng số lượng B4:B30 của bảng dữ liệu, chỉ có điều số lượng xuất <
0, sẽ được Convert thành số 0, chỉ còn các phần tử là số lượng nhập trong kỳ mà

thôi. Ta gọi mảng này là mảng 2
4) Hàm MMULT : hàm này ít ai xài, nhưng nếu kết hợp với các hàm về mảng
khác lại cho ra kết quả khá tốt. Đây chính là hàm ma trận, nhân các phần tử trong
mảng này với các phần tử trong mảng kia. Kết hợp hàm MMULT để nhân mảng 1
và mảng 2 ta có kết quả như sau :
Đây chính là mảng chúng ta cần tìm. Mảng này thể hiện tổng số hàng nhập kho, ta
chỉ cần tìm mảng thể hiện số xuất kho, lấy mảng này trừ đi, ta sẽ tìm được vị trí
First In mới
Bạn sẽ bật cười vì để tạo mảng này, ta có thể chỉ cần hàm SUMIF(B$4:B4,”>0”)
rồi kéo xuống, hơi đâu mà phài làm công thức dài loằng ngoằng khó hiểu như vậy
? Nhưng thực tế, nếu dung hàm SUMIF, bạn sẽ phải thêm các cột phụ, do đó, cách
giải này vẫn là Best Solution
Bạn thử xem hình sau :
Thoạt nhìn, bạn sẽ thấy 2 công thức :
- =MMULT( (ROW(Q)>=TRANSPOSE(ROW(Q))),(Q>0)*Q)
- =SUMIF($B$4:B4,”>0”) hay
- =SUMIF(OFFSET(Q,0,0,ROW()-4,1),">0")
Là cho kết quả tương đương nhau khi bạn nhập chúng vào một cột như hình dưới.
Nhưng thực tế, công thức 1 là công thức mảng, trong khi 2 công thức dưới không
phải công thức mảng.

Kết quả trên của hàm ma trận {= MMULT(
(ROW(Q)>=TRANSPOSE(ROW(Q))),(Q>0)*Q)} thực ra được diễn giải gồm
mảng như sau :
5 0 0 0 0 0 0 > 1*5 + 0*5 + 0* 0 + 2*0 + ….= 5
5 5 0 0 0 0 0 > 1*5 + 1*5 + 0*0 + 2*0 + …. = 10
5 5 0 0 0 0 0 > 1*5 + 1*5 + 1*0 + 2*0 + … = 10
5 5 0 2 0 0 0 > 1*5 + 1*5 + 1*0 + 1*2 + 0*0 + …. = 12
………
Chúng ta sẽ xác định tổng số lượng xuất kho bằng công thức sau :

= SUMIF(OFFSET(Q,0,0,ROW()-4,1),”<0”) hay = SUMIF($B$4:B4,”<0”)

Tổng số của MMULT và SUMIF : = (SLNhập - SLXuất)
Kết hợp 2 hàm này :
=MMULT( (ROW(Q)>=TRANSPOSE(ROW(Q))),(Q>0)*Q)+SUMIF(OFFSET(
Q,0,0,ROW()-4,1),”<0”)
Ta có mảng sau :
Bạn sẽ thấy mảng này thể hiện số lượng hàng tồn sau mỗi lần nhập và xuất kho.
Mảng đầy đủ sẽ là
Mọi việc bắt đầu đơn giản rồi. Điều kiện MMULT + SUMIF >0 sẽ cho ra một
mảng sau :
Mảng đầy đủ phải được diễn giải như sau :
Trong mảng trên, TRUE sẽ đại diện cho hàng còn tồn kho, và False đại diện cho
hàng đã xuất hết kho.
5/ Cuối cùng, ta dung hàm MATCH để xác định vị trí “TRUE” đầu tiên của mảng
trên. Ý nghĩa của nó là dò tìm trong khối Q, đâu là dòng “FIRST In” đầu tiên.
Công thức này là :
{= MATCH(TRUE,(
(ROW(Q)>=TRANSPOSE(ROW(Q))),(Q>0)*Q)+SUMIF(OFFSET(
Q,0,0,ROW()-4,1),”<0”)>0,0)}
Trở về bảng dữ liệu, ta sẽ dung 2 cột phụ là cột D và cột E. Cell đầu tiên của bảng
bắt đầu từ hàng thứ 4, do đó, tại D4 ta nhập 1
Từ D5 đến D30, ta nhập công thức trên, ta sẽ được kết quả là :
1
1
1
1
1
2
2

2
6
6
6
9
9
9
9
9
10
13
13
14
14
14
18
18
18
18
18
18
18
18
Sau khi đã xác định được đâu là vị trí của dòng "First in", ta sang cột E
Tại E4 = B4, số lượng tồn đầu kỳ
E5 = IF(D5=D4,E4+MIN(0,B4),SUMIF(OFFSET(Q,0,0,D5,1),">0 ")
+SUMIF(OFFSET(Q,0,0,ROW()-4,1),"<0"))
Công thức này có thể diễn giải như sau :
- Nếu số lượng hàng cũ còn đủ xài : IF(D5=D4,
thì số lượng hàng tồn kho bằng với E4 trừ đi số lượng hàng xuất ra (Lưu ý hàm

MIN(0,B4) cho kết quả là số âm, chính là số lượng hàng xuất) : E4+MIN(0,B4)
- còn nếu số lượng hàng cũ không đủ xài, thì lấy hàng mới mà xuất :
SUMIF(OFFSET(Q,0,0,D5,1),">0")
- số tồn kho (đợt hàng First in mới) sẽ là tổng số nhập trừ đi tổng số xuất cho đến
thời điểm tính toán :
SUMIF(OFFSET(Q,0,0,D5,1),">0") +SUMIF(OFFSET(Q,0,0,ROW()-4,1),"<0")
Kéo công thức xuống các hàng bên dưới của cột E từ E5 đến E30, ta có hình sau :

Như vậy : Cột E chính là số hàng tồn còn lại sau mỗi nghiệp vụ nhập hàng hay
xuất hàng
Cột F là cột tính FIFO - trị giá hàng xuất bán
- F5 =IF(B5<0,IF(E5+B5>=0,-
B5*INDEX(P,D5),E5*INDEX(P,D5)+(INDEX(Q,D6)-
E6)*INDEX(P,D6)+IF(D6-D5>1,SUMPRODUCT( (OFFSET(Q,D5,0,D6-D5-
1,1)>0),OFFSET(Q,D5,0,D6-D5-1,1),OFFSET(P,D5,0,D6-D5-1,1)),0)),"")
Công thức này có vẻ dài, nhưng không đến nỗi khó hiểu, chúng ta từ từ xem từng
đoạn một như sau :
- Nếu B5 < 0 : số lượng hàng xuất bán (< 0), và nếu số tồn kho (E5) > = số lượng
xuất bán (B5) : E5 + B5 >=0, trị giá xuất sẽ là đơn giá (mảng P), tại vị trí “First
in” (D5) : INDEX(P,D5), nhân số lượng xuất (B5). Vì số lượng xuất của chúng ta
quy định là < 0, nên ta phải đặt thêm dấu - để cho kết quả là số +
=IF(B5<0,IF(E5+B5>=0,-B5*INDEX(P,D5), ……
Xét tại công thức FIFO tại F6, số lượng xuất bán B6 = 3 nhỏ hơn số lượng hàng
tồn E6 = 5, đợt hàng này là đợt 1(D6 = 1) có đơn giá : (INDEX(P,1) = 1) nên trị
giá hàng xuất là : 3*1 = 3

- Ngược lại, nếu số lượng hàng tồn tại vị trí (First in) < số lượng xuất bán, thì lấy
hết số lượng tồn (E5) ra để bán, trị giá xuất của số lượng tồn này là :
E5*INDEX(P,D5), số lượng còn thiếu sẽ được lấy từ vị trí kế tiếp của đợt nhập
hàng.

Số lượng hàng nhập của đợt hàng tiếp theo INDEX(Q,D6) – E6 (số lượng hàng
tồn sau khi xuất bán nốt phần còn thiếu) = Số lượng hàng xuất bán còn thiếu.
Tương tự, đơn giá đợt hàng tiếp theo là INDEX(P,E6)
E5*INDEX(P,D5)+(INDEX(Q,D6)-E6)*INDEX(P,D6)

Xét công thức tính FIFO tại F11, số lượng xuất bán B11 = 3, số lượng tồn cũ là
E11 = 1 của đợt hàng nhập thứ 2 (D11 = 2), có đơn giá là INDEX(P,D11) = 1.1.
Xuất hết số lượng E11, trị giá xuất của số hàng này là : = E11*INDEX(P,D11) =
1*1.1 = 1.1 (hàng màu xanh)
Số lượng còn phải xuất bán thêm là :
- Số lượng đợt nhập hàng kế tiếp : INDEX(Q,D12) = 4 có vị trí thứ 6 (D12=6) của
mảng $B$4 :$B$30 đặt tên là Q, đơn giá của đợt hàng này là INDEX(P,D12) = 1.3
- Số lượng hàng tồn của đợt hàng này sau khi đã xuất bán nốt phần còn thiếu là :
E12 = 2
- Vậy số lượng hàng xuất bán thêm trong đợt hàng sau là : (hàng màu vàng)
= INDEX(Q,D12)-E12 = 4 – 2 = 2
- Trị giá hàng xuất trong đợt hàng sau là : =(INDEX(Q,D12,2)-
E12)*INDEX(P,D12) = 2*1.3 = 2.6
- Trị giá hàng xuất được tính tại :
F11 = E11*INDEX(P,D11) + (INDEX(Q,D12,2)-E12)*INDEX(P,D12) = 1*1.1 +
2*1.3 = 3.7
Nếu D6 – D5 > 1, và nếu số lượng hàng xuất lớn hơn số lượng hàng tồn, nghĩa là
sẽ có nhiều đợt hàng tiếp theo đợt hàng “First in”, do đó :
- Xuất hết số lượng tồn của đợt First in : = E5*INDEX(P,D5)
- Xuất nốt số lượng hàng còn thiếu ở đợt hàng nhập cuối : = (INDEX(Q,D6)-
E6)*INDEX(P,D6)
- Số lượng xuất tại các đợt hàng trung gian giữa 2 giá trị D5 và D6 được xác định
bằng công thức :
= SUMPRODUCT( (OFFSET(Q,D5,0,D6-D5-1,1)>0),OFFSET(Q,D5,0,D6-
D5-1,1),OFFSET(P,D5,0,D6-D5-1,1))

Hàm OFFSET(Q,D5,0,D6-D5-1,1) cho ta 1 mảng con của mảng Q, bắt đầu từ vị
trí đầu tiên của mảng Q, dời xuống D5 hàng, có D6-D5-1 hàng và 1 cột.

×