PRO quản lý kho.

  • Thread starter anktdn
  • Ngày gửi
anktdn

anktdn

Trung cấp
11/7/05
170
2
18
41
HCM
Đây là FILE kho .
 

Đính kèm

  • PRO T10.zip
    71.5 KB · Lượt xem: 1,894
Khóa học Quản trị dòng tiền
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,374
36
48
46
Goooogle
anktdn nói:
Đây là FILE kho .

Nice job!

File của bạn An cũng khá công phu, trong đó vận dụng những kiến thức căn bản của Excel, rất phù hợp cho các bạn bắt đầu ứng dụng Excel thực tiển bao gồm xây dựng danh mục, CSDL nhập-xuất, báo biểu chi tiết và tổng hợp... Cách sử dụng một số công cụ của Excel như Filter, ComboBox, Group... và một chút thiết kế giao diện. Tuy vậy, để file "pro" hơn, bạn cần chú ý vận dụng và khắc một số hạn chế:
1. Cấu trúc CSDL ít nhất là một năm, để khi TH khỏi mất công nhiều. Bạn tìm đọc vận dụng công thức mảng, vận dụng hàm SUMPRODUCT để tổng hợp NXT (tính dư đầu kỳ, PS trong 1 khỏang thời gian bất kỳ, tính giá xuất...
2. Cấu trúc CSDL ntn để khi dữ liệu lớn, Excel không phải "mệt" khi tính toán.
(Tìm xem bài viết về tối ưu hóa tốc dộ tính toán trong Excel, híc, tớ tìm lại mà vội quá không thấy).
3. Vận dụng Name để các hàm tính toán được đơn giản (Tìm xem bài "Sức mạnh của Name" của chị handung107)
4. Vận dụng VBA... cố lên! Anh Duyệt và các bạn sắp dịch xong cuốn VBA for Dummies chưa....!
 
B

bigbigworld

Guest
10/9/05
21
0
1
Quan 9
Cho em hỏi : Nếu danh mục vật tư của công ty có rất là nhiều (gần 500 loại thì mình nên làm như thế nào, nếu dùng hàm (vlookup,sumproduct...) thì tính toán rất chậm, vậy có cách cải thiện tốc độ ko?
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
bigbigworld nói:
Cho em hỏi : Nếu danh mục vật tư của công ty có rất là nhiều (gần 500 loại thì mình nên làm như thế nào, nếu dùng hàm (vlookup,sumproduct...) thì tính toán rất chậm, vậy có cách cải thiện tốc độ ko?
Nếu không dùng một tí VBA thì khó lòng mà cải thiện được tốc độ.
 
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
bigbigworld nói:
Cho hỏi : Nếu danh mục vật tư của công ty có rất là nhiều (gần 500 loại thì mình nên làm như thế nào, ?
Nếu không phải 500 mà là 5.000 loại thì sao đây, các bạn;
Tôi nghỉ đến việc phải phân loại một nất nữa sao (nôm na là biến 5.000 thành chục cái mục; mỗi mục khoảng 500 ấy mà!) cho hay mà chưa được; Các Bác chia sẽ cho ít kinh nghiệm về việc này với!
 
G

gacon0904

Guest
9/7/05
81
0
0
42
tphcm
anktdn nói:
Đây là FILE kho .

Trong sheet Sổ chi tiết hàng hoá tại cell O8 có công thức:
O8=IF(TYPE(MATCH($I$3,OFFSET('NK NHAPXUAT'!$B$7,O7,0):'NK NHAPXUAT'!$B$247,0)+O7)=16,"",MATCH($I$3,OFFSET('NK NHAPXUAT'!$B$7,O7,0):'NK NHAPXUAT'!$B$247,0)+O7)
Cho em hỏi công thức OFFSET('NK NHAPXUAT'!$B$7,O7,0):'NK NHAPXUAT'!$B$247,0) đển làm gì vậy?Cám ơn các anh/chị.
 
H

handung107

Cao cấp
28/8/04
576
15
0
VN
www.giaiphapexcel.com
Hàm Type, không biết tác giả có ý định kiểm tra dữ liệu hay không khi đưa hàm này vào ? Hàm Type sẽ có ý nghĩa , nếu bạn quy định thêm một số kiểu Format. Thí dụ :
-Kiểm tra Mã khách hàng có trong DM khách hàng :
Khi bạn nhập mã Kh vào Cell giả sử là G5, ta đặt công thức tại Cell H5 như sau :
H5=VLOOKUP(G5,DMKH,2,0)
Ta có 2 khả năng xảy ra :
-Nếu trong cột G đưa vào một Mã KH và mã này có trong DMKH thì sẽ đưa tên KH vào ô trong cột H tương ứng
-Nếu không có sẽ cho giá trị #N/A
Trong trường hợp này hàm TYPE(VLOOKUP(G5,DMKH,2,0) sẽ cho giá trị là 16

Các bạn có thể thay thế lỗi này bằng việc sửa lại công thức trên như sau :
=IF(TYPE(VLOOKUP(G5,DMKH,2,0)=16,1,VLOOKUP(G5,DMKH,2,0))
Nếu việc nhập dữ liệu vào cột G không có trong DMKH, hàm IF(TYPE(...),1,0) sẽ trả kết quả là TRUE, do đó ta sẽ sử dụng Format cho các Cell này như sau :
Chọn toàn bộ cột H, vào Format/Cells. Chọn mục Custom, trong khung Type nhập :
[Red][=1]"**Sai dữ liệu",General
Khi đó, nếu nhập Mã KH không hợp lệ, thay vì bạn nhận được kết quả #N/A, ta sẽ có dòng chữ màu đỏ "Sai dữ liệu", dễ chịu hơn, phải không bạn ?
Chúng ta sẽ phân tích tiếp các hàm MATCH, OFFSET trong bài sau các bạn nhé
 
H

handung107

Cao cấp
28/8/04
576
15
0
VN
www.giaiphapexcel.com
Hôm nay, mới có dịp xem File của bạn, tôi xin góp một số ý như sau :
-Tại Sheet SoCTHH, bạn nên dùng Validation, vì bạn có thể lấy ngay giá trị trong Cell I3 khi dùng Validation
-Nếu bạn dùng ComboBox, giá trị trong Cell I3 không thể hiện,đ ể lấy được tên MH trong trường hợp này, bạn phải dùng thêm hàm INDEX, đặt tại một Cell phụ nữa. Nếu không, công thức trong Cell J3 phải sửa như sau :
=VLOOKUP(INDEX('DANH MUC'!A3:C200,'SCT HH'!I2,1),'DANH MUC'!A3:C200,3,0)
Bạn xem lại nhé. Do đó, nếu bạn muốn tránh phải rắc rối này, tôi khuyên bạn đặt DS Validation, bạn sẽ chỉ cần VLOOKUP là đủ. Mặt khác, bạn cần đặt tên cho một số vùng , dãy để dễ làm việc
 
H

handung107

Cao cấp
28/8/04
576
15
0
VN
www.giaiphapexcel.com
gacon0904 nói:
Trong sheet Sổ chi tiết hàng hoá tại cell O8 có công thức:
O8=IF(TYPE(MATCH($I$3,OFFSET('NK NHAPXUAT'!$B$7,O7,0):'NK NHAPXUAT'!$B$247,0)+O7)=16,"",MATCH($I$3,OFFSET('NK NHAPXUAT'!$B$7,O7,0):'NK NHAPXUAT'!$B$247,0)+O7)
Cho em hỏi công thức OFFSET('NK NHAPXUAT'!$B$7,O7,0):'NK NHAPXUAT'!$B$247,0) đển làm gì vậy?Cám ơn các anh/chị.
Trong công thức này, hàm Match sẽ dò tìm vị trí giá trị của Cell $I3 trong mảng $B$7:$B$247 của Sheet NK NhapXuat. Nhưng hàm Match chỉ cho biết thứ tự đầu tiên khi nó dò thấy giá trị đó.

Thí dụ trong mảng NK NhapXuat!$B$7:$B$247 có 5 hàng chứa MãMH thể hiện trong Cell I3, là các hàng 6,10,15,25,40,50...thì tại Cell đầu tiên O7 hàm MATCH($I$3,NKNhapXuat!$B$7:$B$247,0) sẽ cho giá trị là 6. Nếu ta kéo rê công thức xuống các Cell kế tiếp, ta cũng chỉ nhận được kết quả là 6.

Do đó, để có thể tìm được những vị trí khác ta phải dùng hàm OFFSET.
Hàm OFFSET('NK NHAPXUAT'!$B$7,O7,0) có nghĩa tính từ Cell NK NhapXuat!$B$7 sẽ dời xuống số hàng bằng giá trị của Cell O7, ở thí dụ trên hàm Match tại O7 cho giá trị là 6, nghĩa là Cell B7 tại NK NhapXuat sẽ dời xuống dưới 6 hàng để tạo một mảng mới (NKNhapXuat!$B$13:$B247) bắt đầu từ vị trí này hàm Match sẽ tiếp tục dò tìm vị trí kế tiếp của giá trị $I$3.
Với mảng mới này, hàm Match sẽ cho kết quả là 4 tại Cell O8 theo mảng mới (NKNhapXuat!$B$13:$B$247), do đó, nếu ta muốn O8 có kết quả là 10 theo mảng cũ (NKNhapXuat!$B$7:$B$247) thì ta phải cộng thêm số thứ tự của vị trí đầu tiên tại Cell O7 là 6.
Công thức trở thành :
O7=MATCH($I$3,'NK NHAPXUAT'!$B$7:$B$247,0)
O8=MATCH($I$3,OFFSET('NK NHAPXUAT'!$B$7,O7,0):'NK NHAPXUAT'!$B$247,0)+O7
Bạn có thể kéo rê xuống các Cell dưới từ hàng này trở đi
 
H

handung107

Cao cấp
28/8/04
576
15
0
VN
www.giaiphapexcel.com
Với Sheet Phiếu nhập kho và phiếu xuất kho cũng vậy, bạn có thể sử dụng Validation, thay vì dùng Combobox. Bạn nên sử dụng một Form thôi cho cả 2 phiếu này, vì nó cùng một cấu trúc, thứ tự, và các dữ liệu cũng lấy từ một Sheet là NK NhapXuat. DS của bạn cũng thể hiện cả số phiếu nhập và số phiếu xuất chung với nhau
Các tiêu đề thay đổi, bạn có thể dùng hàm IF cho sự thay đổi này
Giả sử bạn có vài trăm phiếu nhập và vài trăm phiếu xuất, nếu các phiếu này có nhiều mặt hàng khác nhau, mỗi mặt hàng được thể hiện trên một hàng, thì sẽ có rất nhiều mã phiếu nhập, xuất trùng với nhau, DS sẽ dài ra và rất rối mắt.
Bạn nên dùng hàm Match kết hợp với COUNTIF để lọc ra một DS chưa các số phiếu nhập xuất duy nhất làm DS Validation tại các Sheet in phiếu nhập kho và xuất kho này.

Bạn đã dùng hàm Type để khử lỗi N/A, sao bạn không dùng hàm ISNA(), trong nhiều trường hợp, nó gọn hơn đấy ? Và hình như bạn cũng chưa khử hết lỗi này trogn File của bạn ?
 
anktdn

anktdn

Trung cấp
11/7/05
170
2
18
41
HCM
Cảm ơn những lời góp ý và chỉ bảo của chị em sẽ cố gắng làm cho hay hơn 1 chút nữa. chúc chị sức khoẻ!
 
G

gacon0904

Guest
9/7/05
81
0
0
42
tphcm
handung107 nói:
Với Sheet Phiếu nhập kho và phiếu xuất kho cũng vậy, bạn có thể sử dụng Validation, thay vì dùng Combobox. Bạn nên sử dụng một Form thôi cho cả 2 phiếu này, vì nó cùng một cấu trúc, thứ tự, và các dữ liệu cũng lấy từ một Sheet là NK NhapXuat. DS của bạn cũng thể hiện cả số phiếu nhập và số phiếu xuất chung với nhau
Các tiêu đề thay đổi, bạn có thể dùng hàm IF cho sự thay đổi này
Giả sử bạn có vài trăm phiếu nhập và vài trăm phiếu xuất, nếu các phiếu này có nhiều mặt hàng khác nhau, mỗi mặt hàng được thể hiện trên một hàng, thì sẽ có rất nhiều mã phiếu nhập, xuất trùng với nhau, DS sẽ dài ra và rất rối mắt.
Bạn nên dùng hàm Match kết hợp với COUNTIF để lọc ra một DS chưa các số phiếu nhập xuất duy nhất làm DS Validation tại các Sheet in phiếu nhập kho và xuất kho này.

Bạn đã dùng hàm Type để khử lỗi N/A, sao bạn không dùng hàm ISNA(), trong nhiều trường hợp, nó gọn hơn đấy ? Và hình như bạn cũng chưa khử hết lỗi này trogn File của bạn ?

Chị HANDUNG chỉ giúp em cách lọc ra một DS chứa các số phiếu nhập xuất duy nhất.Em thử dùng 2 hàm như chị nói không được.Cám ơn chị nhều.
 
H

handung107

Cao cấp
28/8/04
576
15
0
VN
www.giaiphapexcel.com
Giả sử cột A chứa các mã Phiếu Nhập Xuất và bắt đầu từ Cell A3:A200 , đặt tên mảng này là MaPhieuNX.
Ta sẽ lần lượt thực hiện các hàm căn bản để rút các loại dữ liệu một cách tự động.
-Đếm các Mã Phiếu NX trong cột A bằng hàm COUNTIF
=COUNTIF($A$3:A3,A3)
Các mã Phiếu NX trùng nhau sẽ có các số thứ tự từ 1 đến n lần xuất hiện
-Chọn cột phụ nào đó (giả sử cột B) luôn luôn là cột thoả các điều kiện ta muốn, đặt tên là GhiSo. Ta có công thức điều kiện như sau :
B3 = IF(COUNTIF($A$3:A3,A3)=1,"X","")
(Nếu các mã Phiếu NX xuất hiện đầu tiên sẽ được đánh dấu bằng chữ "X", nếu không sẽ bỏ trống)
Tại cột C ta đặt hàm dò tìm vị trí các hàng được đánh dấu "X" trong cột B
C3=MATCH("X",GhiSo,0) GhiSo là mảng B3:B200
C4=MATCH("X",OFFSET(GhiSo,C3,0),0)+C3
Kiểu dùng hàm MATCH và OFFSET đã giải thích ở trên
Bây giờ, ta chọn vị trí nào đó thuận lợi để đặt DS mã Phiếu NX duy nhất được lọc ra từ mảng MaPhieuNX, giả sử đó là cột D. Đặt công thức như sau :
D3=IF(ISNA(C3),"",INDEX(MaPhieuNX,C3,0))
Kéo công thức xuống các hàng bên dưới, ta sẽ được một DS chỉ chứa các Mã Phiếu NX không trùng lặp. Ta sẽ đặt tên cột D này là DS và dùng DS để đặt Validation lựa chọn các Mã Phiếu trong phiếu Nhập kho và Xuất kho
 
G

gacon0904

Guest
9/7/05
81
0
0
42
tphcm
handung107 nói:
Trong công thức này, hàm Match sẽ dò tìm vị trí giá trị của Cell $I3 trong mảng $B$7:$B$247 của Sheet NK NhapXuat. Nhưng hàm Match chỉ cho biết thứ tự đầu tiên khi nó dò thấy giá trị đó.

Thí dụ trong mảng NK NhapXuat!$B$7:$B$247 có 5 hàng chứa MãMH thể hiện trong Cell I3, là các hàng 6,10,15,25,40,50...thì tại Cell đầu tiên O7 hàm MATCH($I$3,NKNhapXuat!$B$7:$B$247,0) sẽ cho giá trị là 6. Nếu ta kéo rê công thức xuống các Cell kế tiếp, ta cũng chỉ nhận được kết quả là 6.

Do đó, để có thể tìm được những vị trí khác ta phải dùng hàm OFFSET.
Hàm OFFSET('NK NHAPXUAT'!$B$7,O7,0) có nghĩa tính từ Cell NK NhapXuat!$B$7 sẽ dời xuống số hàng bằng giá trị của Cell O7, ở thí dụ trên hàm Match tại O7 cho giá trị là 6, nghĩa là Cell B7 tại NK NhapXuat sẽ dời xuống dưới 6 hàng để tạo một mảng mới (NKNhapXuat!$B$13:$B247) bắt đầu từ vị trí này hàm Match sẽ tiếp tục dò tìm vị trí kế tiếp của giá trị $I$3.
Với mảng mới này, hàm Match sẽ cho kết quả là 4 tại Cell O8 theo mảng mới (NKNhapXuat!$B$13:$B$247), do đó, nếu ta muốn O8 có kết quả là 10 theo mảng cũ (NKNhapXuat!$B$7:$B$247) thì ta phải cộng thêm số thứ tự của vị trí đầu tiên tại Cell O7 là 6.
Công thức trở thành :
O7=MATCH($I$3,'NK NHAPXUAT'!$B$7:$B$247,0)
O8=MATCH($I$3,OFFSET('NK NHAPXUAT'!$B$7,O7,0):'NK NHAPXUAT'!$B$247,0)+O7
Bạn có thể kéo rê xuống các Cell dưới từ hàng này trở đi

Chị HANDUNG cho em hỏi công thức OFFSET('NK NHAPXUAT'!$B$7,O7,0):'NK NHAPXUAT'!$B$247 trong đó OFFSET('NK NHAPXUAT'!$B$7,O7,0) em hiểu rồi nhưng :'NK NHAPXUAT'!$B$247 là cài gì vậy? theo em hiểu là vị trí cuối của vùng và OFFSET('NK NHAPXUAT'!$B$7,O7,0) là vị trí đầu của vùng nhưng em thử lảm hàm OFFSET('NK NHAPXUAT'!$B$7,O7,0) thì nó ra giá trị chứ không phải địa chỉ ô thì làm sao mà ghép lại thành vùng.Em cám ơn Chị.Chào Chị.
 
H

handung107

Cao cấp
28/8/04
576
15
0
VN
www.giaiphapexcel.com
=OFFSET('NK NHAPXUAT'!$B$7,O7,0):'NK NHAPXUAT'!$B$247 hay OFFSET('NK NHAPXUAT'!$B$7:'NK NHAPXUAT'!$B$247,O7,0) sẽ tạo ra một mảng mới bắt đầu từ vị trí hàng mới là giá trị số của Cell O7, chứ không tạo ra địa chỉ gì cả ?
Bạn phải hiểu như sau :
-Để dễ hình dung, tôi giả sử mảng nguyên thủy của bạn là từ $B$7:$B$15 gồm các phần tử sau : {C,C,A,B,B,C,A,B,A}
-Tại Cell O7, hàm MATCH dò vị trí của phần tử A đầu tiên sẽ cho bạn một giá trị là 3
O7=MATCH("A",$B$7:$B$15,0)
-Ta tìm vị trí phần tử A kế tiếp phải là là vị trí thứ 7. Ta sẽ kết hợp với hàm OFFSET. Bạn nhập thử hàm sau vào cột nào đó để thử xem hàm này nói lên điều gì ? OFFSET($B$7:$B$15,3,0) Số 3 chính là giá trị của Cell O7 ? Bạn sẽ thấy hàm này cho ra một mảng khác bớt đi 3 phần tử so với mảng cũ. Mảng mới này gồm {B,B,C,A,B,A}.
-Khi bạn dùng hàm OFFSET kết hợp với hàm MATCH để tiếp tục dò tìm vị trí phần tử A trong mảng mới này nó sẽ cho kết quả là 4. Nếu ta muốn biết vị trí của nó trong mảng cũ, ta sẽ phải cộng thêm giá trị 3 (O7) vào kết quả
O8=MATCH("A",OFFSET($B$7:$B$15,O7,0)+O7
Bạn có thể thử kết quả này trong các vị trí khác để hiểu hơn về cách các hàm tính toán và hoạt động
 
H

Hoàn Long

Guest
30/11/05
3
0
0
41
Hải Dương
?????????

anktdn nói:
Đây là FILE kho .
file PRO T10 và file KT ANKTDN sao lại không in được nhỉ ?:wall:
Khả năng máy in gặp trặc là không thể vì tôi vẫn in các file word và Excel khác bình thường, thậm chí chèn thêm các Sheet khác trong file của các bạn cũng vẫn in bình thường.
Mong bạn chỉ giúp.
 
H

handung107

Cao cấp
28/8/04
576
15
0
VN
www.giaiphapexcel.com
Rất tiếc, tôi không giúp gì bạn được cả, vì tôi vừa xem lại 2 File này, và in được bình thường, các bạn khác có ai thấy lỗi này không, giúp bạn hoanlong với
 
G

gacon0904

Guest
9/7/05
81
0
0
42
tphcm
handung107 nói:
Hôm nay, mới có dịp xem File của bạn, tôi xin góp một số ý như sau :
-Tại Sheet SoCTHH, bạn nên dùng Validation, vì bạn có thể lấy ngay giá trị trong Cell I3 khi dùng Validation
-Nếu bạn dùng ComboBox, giá trị trong Cell I3 không thể hiện,đ ể lấy được tên MH trong trường hợp này, bạn phải dùng thêm hàm INDEX, đặt tại một Cell phụ nữa. Nếu không, công thức trong Cell J3 phải sửa như sau :
=VLOOKUP(INDEX('DANH MUC'!A3:C200,'SCT HH'!I2,1),'DANH MUC'!A3:C200,3,0)
Bạn xem lại nhé. Do đó, nếu bạn muốn tránh phải rắc rối này, tôi khuyên bạn đặt DS Validation, bạn sẽ chỉ cần VLOOKUP là đủ. Mặt khác, bạn cần đặt tên cho một số vùng , dãy để dễ làm việc

Chị HANDUNG cho em hỏi.Trong sheet PN Kho,PX kho,ở chổ combobox chọn phiếu nhập,xuất có 2 ô Nợ,Có để làm gì vậy?và em không thấy công thức tính hai ô đó.Cám ơn chị HANDUNG nhiều.Chào Chị.
 

Xem nhiều

Webketoan Zalo OA