PRO quản lý kho.

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi anktdn, 13 Tháng mười một 2005.

8,321 lượt xem

  1. anktdn

    anktdn Thành viên thân thiết

    Bài viết:
    170
    Đã được thích:
    2
    Nơi ở:
    HUE-HCM
    Đây là FILE kho .
     

    Các file đính kèm:

    #1
  2. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    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....!
     
    #2
  3. bigbigworld

    bigbigworld Thành viên hoạt động

    Bài viết:
    21
    Đã được thích:
    0
    Nơi ở:
    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?
     
    #3
  4. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    Nếu không dùng một tí VBA thì khó lòng mà cải thiện được tốc độ.
     
    #4
  5. HongViet

    HongViet Thành viên thân thiết

    Bài viết:
    286
    Đã được thích:
    10
    Nơi ở:
    Đà nẵng
    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!
     
    #5
  6. gacon0904

    gacon0904 Thành viên hoạt động

    Bài viết:
    81
    Đã được thích:
    0
    Nơi ở:
    tphcm
    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ị.
     
    #6
  7. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    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é
     
    #7
  8. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    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
     
    #8
  9. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    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
     
    #9
  10. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    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 ?
     
    #10
  11. anktdn

    anktdn Thành viên thân thiết

    Bài viết:
    170
    Đã được thích:
    2
    Nơi ở:
    HUE-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ẻ!
     
    #11
  12. gacon0904

    gacon0904 Thành viên hoạt động

    Bài viết:
    81
    Đã được thích:
    0
    Nơi ở:
    tphcm
    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.
     
    #12
  13. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    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
     
    #13
  14. gacon0904

    gacon0904 Thành viên hoạt động

    Bài viết:
    81
    Đã được thích:
    0
    Nơi ở:
    tphcm
    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ị.
     
    #14
  15. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    =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
     
    #15
  16. Hoàn Long

    Hoàn Long Thành viên sơ cấp

    Bài viết:
    3
    Đã được thích:
    0
    Nơi ở:
    Hải Dương
    ?????????

    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.
     
    #16
  17. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    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
     
    #17
  18. gacon0904

    gacon0904 Thành viên hoạt động

    Bài viết:
    81
    Đã được thích:
    0
    Nơi ở:
    tphcm
    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ị.
     
    #18
  19. mysterious_girl

    mysterious_girl Thành viên sơ cấp

    Bài viết:
    358
    Đã được thích:
    1
    Nơi ở:
    ...close to you...
    #19
  20. gacon0904

    gacon0904 Thành viên hoạt động

    Bài viết:
    81
    Đã được thích:
    0
    Nơi ở:
    tphcm
    Ý của em là hỏi 2 ô Nơ,Có ở kế combox phiếu nhâp kho trong sheet PN Kho dùng để làm gì mà không thấy công thức. Cám ơn.
     
    #20

Chia sẻ trang này