Hỏi cách tính N-X-T theo nhiều điều kiện? (1 người xem)

Người dùng đang xem chủ đề này

mthangk99

Thành viên chính thức
Tham gia
23/2/15
Bài viết
61
Được thích
5
Chào các bạn, hiện tại mình đang cần tính số liệu cuối cùng của bảng tính là N-X-T theo nhiều tiêu chí các bạn xem giúp mình với nhé!
 

File đính kèm

Chào các bạn, hiện tại mình đang cần tính số liệu cuối cùng của bảng tính là N-X-T theo nhiều tiêu chí các bạn xem giúp mình với nhé!
Trình bày lại cấu trúc dữ liệu. Làm theo bảng đó là chịu thua luôn.
Tìm tham khảo các file N-X-T đã có trên diễn đàn.
 
Mình xoay lại cấu trúc & xài VBA nè;
Bạn thao tác & kiểm tra số liệu sau mỗi thao tác đi nha.
 

File đính kèm

Dữ liệu của mình ở đây là theo 1 form từ cấp trên chỉ thị bằng văn bản các bạn à nên mình muốn thay đổi cũng không được, vì muốn thực hiện bằng công thức thay vì nhặt tay nên mình mới tìm cách để cho dữ liệu vào tự động. Bảng của mình hơn 2.000 dòng/tháng và có thể báo cáo theo tuần hoặc theo bất cứ thời điểm nào chứ không phải là hết tháng mới làm báo cáo tháng nên nếu tự nhảy số liệu sẽ đỡ hơn rất nhiều.

Có thể dùng vài cột phụ bên cạnh bảng để giải quyết vấn đề được không các bạn? Hoặc kể cả cột phụ nằm trên sheet khác rồi link dữ liệu từ sheet này sang để nhảy tồn cuối của từng loại theo từng kho không?
 
Thứ nhất: Cấp trên càng cao càng chả biết gì về CSDL;

Thứ nhì: Có thể từ Form ngu ngốc đó, ta viết macro chuyển dữ liệu về CSDL chuẩn để làm;

Thứ nữa: Tuy nhiên bạn sẽ cực nhiều vì cấp trên dốt về CSDL

Chúc vui!
 
Thứ nữa: Tuy nhiên bạn sẽ cực nhiều vì cấp trên dốt về CSDL

Cái này chưa chắc. Lắm khi do cấp trên dốt mà công việc của mình ít đi. Công việc chỉ 1/2 giờ có thể làm như quan trọng kéo dài vài ngày.

(nhất là nếu giỏi cách hỏi, đưa cả file lên đây, đi uống cà phê, trở về là có hết)
 
Thứ nhất: Cấp trên càng cao càng chả biết gì về CSDL;

Thứ nhì: Có thể từ Form ngu ngốc đó, ta viết macro chuyển dữ liệu về CSDL chuẩn để làm;

Thứ nữa: Tuy nhiên bạn sẽ cực nhiều vì cấp trên dốt về CSDL

Chúc vui!
Mấy thằng lãnh đạo có nhiều khi đầu óc của nó còn cao siêu hơn ý mình nghĩ đó anh.
Một phần mềm nếu viết 1 lần mà đáp ứng hết tất cả các yêu cầu của việc tổng hợp, báo cáo, xuất dữ liệu thì tụi nó sẽ ăn cám.
Vì vậy, nó cần bổ sung thêm kế hoạch sửa đổi, bổ sung thêm cái này bớt cái nọ nó mới được hưởng lợi.
Trong công việc thì phải bày, vẽ cho nhiều vào mới có việc làm, chứ nhấn nút cái là ra kết quả thì phải giảm bớt nhân viên, mà nhân viên ít quá thì lấy ai để sai khiến làm việc này, việc nọ, nếu không bày, vẽ thêm nhiều việc thì lấy cái gì bỏ túi?????
 
Cũng ráng gồng theo form của bạn. Xem file đính kèm.
Sheet đầu tiên là tổng hợp.
Sheet sau là chọn điều kiện theo ngày tháng, kho và SP
 

File đính kèm

Chào các bạn, hiện tại mình đang cần tính số liệu cuối cùng của bảng tính là N-X-T theo nhiều tiêu chí các bạn xem giúp mình với nhé!

Cái bạn đưa ra đó chỉ là bảng chi tiết phát sinh. Nó như một đám giấy chứng từ xếp chồng lên nhau. Tự nó không thể dùng trực tiếp làm bảng tính để phân tích hay bảng báo cáo được.
Muốn phân tích hay báo cáo thì phải tổng hợp các chi tiết phát sinh vào một bảng chi tiết khác, đúng thứ tự và mạch lạc.

Làm cái này khong khó nhưng tôi khong thích làm việc với 2 loại trình bày:
1. Màu phông tùm lum. Tôi bị bệnh mù màu, nhìn màu tùm lum tôi nhức đầu lắm
2. Merged cells, làm tính toán mà bị cái này dễ bị đếm sai ô.

Mà tôi chưa thấy ai làm bảng chi tiết phát sinh như bạn. Ngay cả làm giấy tờ thủ công thì người ta ít nhất cũng xếp thứ tự theo ngày, và theo kho.
 
Cũng ráng gồng theo form của bạn. Xem file đính kèm.
Sheet đầu tiên là tổng hợp.
Sheet sau là chọn điều kiện theo ngày tháng, kho và SP
Cũng không thể gồng được, nếu không thấy mặt mũi cái anh này:

Dữ liệu của mình ở đây là theo 1 form từ cấp trên chỉ thị bằng văn bản các bạn à nên mình muốn thay đổi cũng không được

Sau khi thấy mặt mũi nó mới tính việc còn lại, chứ lãnh đạo nó khó tính lắm muốn thay đổi cái gì là làm theo ý chứ không dựa vào quy tắc nào cả.
 
Mấy thằng lãnh đạo có nhiều khi đầu óc của nó còn cao siêu hơn ý mình nghĩ đó anh.

Cái mớ dữ liệu được đưa ra là chủ thớt đã nhào nặn một chập rồi. Mình đâu có thấy cái bảng ban đầu đâu cho nên khó thể kết luận về "mấy thằng lãnh đạo".
 
Cảm ơn các bạn đã góp ý và giúp đỡ mình, mình tìm lại tài liệu và đã giải quyết được vấn đề theo cách tạm chấp nhận được như file dưới đây. Có bạn nào biết cách dùng hàm khác thì gợi ý giúp mình với nhé.
 

File đính kèm

Cái mớ dữ liệu được đưa ra là chủ thớt đã nhào nặn một chập rồi. Mình đâu có thấy cái bảng ban đầu đâu cho nên khó thể kết luận về "mấy thằng lãnh đạo".

Mình copy cái form mà trên tập đoàn gửi xuống, có mẫu số ban hành theo thông tư của Bộ tài chính. Còn để xuất được ra dữ liệu theo như form này theo yêu cầu mình đã làm 1 bảng chi tiết nhập tay theo dòng rồi xuất trực tiếp sang biểu yêu cầu để in.
 
Cái bạn đưa ra đó chỉ là bảng chi tiết phát sinh. Nó như một đám giấy chứng từ xếp chồng lên nhau. Tự nó không thể dùng trực tiếp làm bảng tính để phân tích hay bảng báo cáo được.
Muốn phân tích hay báo cáo thì phải tổng hợp các chi tiết phát sinh vào một bảng chi tiết khác, đúng thứ tự và mạch lạc.

Làm cái này khong khó nhưng tôi khong thích làm việc với 2 loại trình bày:
1. Màu phông tùm lum. Tôi bị bệnh mù màu, nhìn màu tùm lum tôi nhức đầu lắm
2. Merged cells, làm tính toán mà bị cái này dễ bị đếm sai ô.

Mà tôi chưa thấy ai làm bảng chi tiết phát sinh như bạn. Ngay cả làm giấy tờ thủ công thì người ta ít nhất cũng xếp thứ tự theo ngày, và theo kho.

Bên sheet nhập liệu của mình hàng tháng dự tính khoảng hơn 2.000 dòng dữ liệu, bao gồm khoảng 30 kho nhỏ lẻ và khoảng hơn 20 loại sản phẩm đúng ra phải chia ra khoảng 50 sheets theo như dự tính ban đầu nhưng mình phải tính lại để lập ra biểu thuận tiện nhất, nhờ sự giúp đỡ của các bạn trên GPE mình đang gần giải quyết gần xong vấn đề rồi. 1 Sheet nhập liệu, 1 Sheet tổng hợp theo sản phẩm và 1 Sheet tổng hợp theo kho, như vậy khi mình cần in dữ liệu theo cái gì mình chỉ cần lọc theo Combobox để lấy dữ liệu cần thiết.

Mình muốn tô màu vào vùng dữ liệu cho các bạn dễ nhìn và dễ hiểu hơn để giúp đỡ mình, nếu như có hơi rối mắt mong các bạn thông cảm lần sau mình sẽ rút kinh nghiệm!
 
Mình vừa test xong dữ liệu của file đang làm và đã bị sai, thiếu mất điều kiện của chủng loại sản phẩm và chưa xử lý được.
 
Biếu bạn chủ bài đăng macro chuyển dữ liệu từ Form sang CSDL kề bên phải cùng trang:
PHP:
Sub ChuyenDuLieu()
 Dim Arr()
 Dim Rws As Long, J As Long, Col As Byte, W As Long
 Rws = [b7].CurrentRegion.Rows.Count
 Arr() = [b7].Resize(Rws, 9).Value
 ReDim dArr(1 To Rws, 1 To 7):      [p2].CurrentRegion.Offset(1).ClearContents
 For J = 1 To UBound(Arr())
    If Arr(J, 1) = "" Then
        Exit For
    Else
        W = W + 1:                  dArr(W, 1) = W
        dArr(W, 2) = Arr(J, 1)
        If Arr(J, 2) <> "" Then
            dArr(W, 3) = "N":       dArr(W, 4) = Arr(J, 2)
            dArr(W, 7) = Arr(J, 8)
        ElseIf Arr(J, 3) <> "" Then
            dArr(W, 3) = "X":       dArr(W, 4) = Arr(J, 3)
            dArr(W, 7) = Arr(J, 9)
        End If
        dArr(W, 5) = Arr(J, 6):     dArr(W, 6) = Arr(J, 7)
    End If
 Next J
 [N2].Resize(W, 7).Value = dArr()
End Sub

Chúc vui!
 
(1) Bên sheet nhập liệu của mình hàng tháng dự tính khoảng hơn 2.000 dòng dữ liệu, bao gồm khoảng 30 kho nhỏ lẻ và khoảng hơn 20 loại sản phẩm đúng ra phải

(2)1 Sheet nhập liệu, 1 Sheet tổng hợp theo sản phẩm và 1 Sheet tổng hợp theo kho, như vậy khi mình cần in dữ liệu theo cái gì mình chỉ cần lọc theo Combobox để lấy dữ liệu cần thiết.

(3) Mình muốn tô màu vào vùng dữ liệu cho các bạn dễ nhìn và dễ hiểu hơn để giúp đỡ mình . . . .

(1) Nếu dữ liệu như vậy thì quên "Công thức" đi!
Chỉ có thể là VBA mới trường tồn được;

(2) VBA có thể giúp bạn lập bản kê tồn đầu kì, nhập trong kì & xuất trong kì của bất kì đoạn thời gian nào mà bạn mong muốn. Chỉ có điều bạn có sẵn lòng đón nhận hay không mà thôi.

(3) Chỉ cần tô màu các tên trường/cột dữ liệu mà thôi; File đầu bạn đưa lên thì bạn tô cả cột của trang tính còn gì
 
(1) Nếu dữ liệu như vậy thì quên "Công thức" đi!
Chỉ có thể là VBA mới trường tồn được;

(2) VBA có thể giúp bạn lập bản kê tồn đầu kì, nhập trong kì & xuất trong kì của bất kì đoạn thời gian nào mà bạn mong muốn. Chỉ có điều bạn có sẵn lòng đón nhận hay không mà thôi.

(3) Chỉ cần tô màu các tên trường/cột dữ liệu mà thôi; File đầu bạn đưa lên thì bạn tô cả cột của trang tính còn gì

Cảm ơn bạn! Mình không không viết được code VBA nên không hay dùng nó, nếu mà cứ cái khó lại hỏi các bạn thì cũng hơi ngại, hơn nữa biểu của mình nhiều khi có sự thay đổi thêm cột, bớt dòng... Ngoài ra VBA lại buộc phải dùng phím nóng hoặc ấn Cmd để kích hoạt nó mà lại không tự động nhảy luôn như công thức. Dù VBA mạnh hơn dùng hàm nhiều nhưng mình vẫn chưa hiểu rõ về những cái mà nó làm được, bạn chỉ cho mình một chút tổng quát về nó được không?
 
(A) Mình không ưa chỉ dẫn tổng quát; mình muốn chỉ dẫn & bạn thực hiện được ngay;
Để vậy bạn cần đưa lên đây 2 trang tính:
1./ Là Form dữ liệu của bạn trong tháng nào đó đã xa lơ xa lắc;
2./ Trang còn lại chứa danh sách 30 mã tên kho & danh sách các mã mặt hàng đang trong diện quản lý của bạn;
(Lưu í mà mã nha; Mình cũng không quan tâm các tên kho hay tên mặt hàng kinh doanh nơi bạn để làm gì!)

(B) Thêm bớt dòng thì vô tư; Thêm cột là điều đáng nói; Cái này thường thấy ở những sếp tính khí khác thường của bạn;
Cũng phải nói là trong hoạt động của 1 CSDL không phải là không có phát sinh;
Nhưng phát sinh theo tính khí bình thường thì ta tìm cách thỏa mãn nó; Còn thất thường thì thôi nhau cho đỡ cực cả hai!

Xin chờ thông tin từ bạn!
 
Xin chờ thông tin từ bạn!

Thực ra là cái này việc này là mới thôi bạn à, trước đây làm kiểu khác bởi người làm trước sắp về hưu nên theo cách cũ thủ công, cổ điển. Nay người ta gần về hưu rồi thì phát sinh công việc này và mình đã phải thiết kế lại mẫu biểu, tuy nhiên trong quá trình làm các hàm mình vướng chỗ nào lại nghĩ ra cách để mò và hỏi tương tự giống với vướng mắc mình đang gặp phải rồi mình mới áp dụng vào biểu chính. Thực ra bây giờ vẫn chưa có biểu với số liệu chính thức nên không có dữ liệu cũ để gửi lên đây mà chỉ có dữ liệu nháp nên nhiều khi test độ chính xác của công thức cũng mất thời gian chứ bên mình cũng không ngại đưa số liệu thật lên đây đâu. Trong thời gian tới nếu như hàm và công thức đã thiết kế khó đáp ứng được yêu cầu của công việc nhất định mình cần nhờ đến sự giúp đỡ của các bạn. Mình cảm ơn thành ý của bạn và các bạn trong diễn đàn, đã nhiều lần việc mình rất cần để xử lý may mà có các bạn giúp đỡ chứ không mình bế tắc không thể tiếp tục được. Thân!
 
Phần yêu cầu của bài N-X-T theo nhiều điều kiện trong bài này mình đã test xong, mình gửi lên diễn đàn cho bạn nào cần tìm để áp dụng cho công việc tương tự.
 

File đính kèm

Trong file ban đầu, bạn nói chỉ có 3 kho và vài mặt hàng. Đến bài #15, con số là 30 kho và 20 mặt hàng.
Với con số này thì Excel khong quản lý nổi đâu. Nên chuyển dữ liệu phát sinh vào Access và thiết kế bảng kho, bảng mặt hàng hoàn chỉnh. Lúc cần báo cáo thì dùng query lấy ra.
 
Trong file ban đầu, bạn nói chỉ có 3 kho và vài mặt hàng. Đến bài #15, con số là 30 kho và 20 mặt hàng.
Với con số này thì Excel khong quản lý nổi đâu. Nên chuyển dữ liệu phát sinh vào Access và thiết kế bảng kho, bảng mặt hàng hoàn chỉnh. Lúc cần báo cáo thì dùng query lấy ra.

Trước đây mình cũng có làm ứng dụng nhỏ bằng Access 2003 nhưng đến phần làm báo cáo thì không làm được, bỏ cũng lâu rồi nên mình ngại đụng đến Access quá không biết bây giờ Access 2013 có tùy biến hơn Access 2003 nhiều không. Mình vẫn đang trong quá trình test để xem liệu có sử dụng được không đã, công thức Excel nhiều quá chắc sẽ nặng lắm.
 
(1) Xài MS Access thì cần biết VBA; Nếu không thì nên chuyển sang xài Excel;

(2) Mình đã thử làm trong Excel với 2.200 dòng, 35 kho & chục mặt hàng thì mất cỡ 1.5'' cho mỗi lần chạy macro;

(3) Mình vẫn khuyên bạn chủ đề tài thảo luận, là:

CSDL nên & chỉ nên có các trường sau:

[STT], [Ngày], [N/X], [Mã SF], [Ca], [(Mã) Kho], [So Luong]

Với CSDL như vậy thì không thể làm khó trogn Excel với iêu cầu 2000 dòng & số kho cũng như số mặt hàng bạn đã nêu

Rất mừng & sẵn lòng giúp tiếp, nếu bạn từ bỏ Form của bạn & xây dựng CSDL như trên!
 
Phần yêu cầu của bài N-X-T theo nhiều điều kiện trong bài này mình đã test xong, mình gửi lên diễn đàn cho bạn nào cần tìm để áp dụng cho công việc tương tự.
File vướng nguyên tắc cơ bản của việc ghi sổ, nhập liệu vào cơ sở dữ liệu:
Dữ liệu phải ghi nhận theo trình tự thời gian
Sử dụng kết quả theo công thức trong file rất dể bị mất việc
 
(Trang) CSDL nên & chỉ nên có các trường sau:
[STT], [Ngày], [N/X], [Mã SF], [Ca], [(Mã) Kho], [So Luong]
Nếu bạn nhập đủ dữ liệu hơn 2 ngàn dòng & chạy macro này trên trang 'BCao':
PHP:
Sub GPEThongKeNXT()
 Dim Sh As Worksheet, Arr(), Cls As Range, dArr()
 Dim Rws As Long, J As Long, W As Long
 Dim TDKy As Double, Tmr As Double, Nhap As Double, Xuat As Double
 Set Sh = ThisWorkbook.Worksheets("CSDL")
 Rws = Sh.[b2].CurrentRegion.Rows.Count
 Arr() = Sh.[b2].Resize(Rws, 6).Value:              Tmr = Timer()
 Sheets("BCao").Select:                             Randomize
1 dArr() = Range([b5], [b5].End(xlDown)).Resize(, 4).Value
 Range([b5], [b5].End(xlDown)).Offset(, 1).Resize(, 3).ClearContents
 For W = 1 To UBound(dArr())
    For J = 1 To UBound(Arr())
2       If Arr(J, 1) < [e1].Value And Arr(J, 3) = dArr(W, 1) And Arr(J, 5) = [h1].Value Then
            If Arr(J, 2) = "N" Then
                dArr(W, 2) = dArr(W, 2) + Arr(J, 6)
            ElseIf Arr(J, 2) = "X" Then
                dArr(W, 2) = dArr(W, 2) - Arr(J, 6)
            End If
        End If
3       If Arr(J, 1) >= [e1].Value And Arr(J, 3) = dArr(W, 1) And Arr(J, 5) = [h1].Value _
            And Arr(J, 1) <= [e2].Value Then
            If Arr(J, 2) = "N" Then
                dArr(W, 3) = dArr(W, 3) + Arr(J, 6)
            ElseIf Arr(J, 2) = "X" Then
                dArr(W, 4) = dArr(W, 4) + Arr(J, 6)
            End If
        End If
    Next J
 Next W
 Range([b5], [b5].End(xlDown)).Resize(, 4).Value = dArr()
 [c4].Resize(, 3).Interior.ColorIndex = 34 + 9 * Rnd() \ 1
 [A1].Value = Timer() - Tmr
End Sub

với các chú chỉ đẫn theo 3 dòng lệnh có đánh số như sau

Dòng đánh số 1: Vùng Range([b5], [b5].End(xlDown)) là vùng chứa danh sách các mã mặt hàng bạn đang có;

Dòng đánh số 2: [H1] trên trang 'BCao' đang chứa mã kho cần hiễn thị số liệu;

Dòng đang có số 3: [e1] là ô ghi ngày bắt đầu & dưới nó là ngày kết thúc số liệu báo cáo (ví dụ: [E1]:=01/04/2017; [E2]:= 30/06/2017).

Chúc vui!
 
Cái này nếu tôi đưa vào CSDL LH thì chỉ dùng Query bình thường đủ rồi. Lúc cần báo cáo thì cho query xuất ra csv và import vào Excel.
Tính tôi thích làm thủ công, lười viết code VBA lắm.
 
Mình thì ngược lại, viết Code vì chả có việc gì làm nữa cả:
Mã:
Option Explicit
Sub TKeTheoSanFam()
 Range([b5], [b5].End(xlDown)).Resize(, 4).ClearContents
 Worksheets("CSDL").[aA2].CurrentRegion.Copy Destination:=[B4]
 GPE [h2], 5, 3
End Sub
Mã:
Sub TKeTheoKho()
 Range([b5], [b5].End(xlDown)).Resize(, 4).ClearContents
 Sheets("CSDL").[aC2].CurrentRegion.Copy Destination:=[B4]
 GPE [h1], 3, 5
End Sub
PHP:
Sub GPE(Rng As Range, Col As Byte, Cot As Byte)
 Dim Sh As Worksheet, Arr(), dArr()
 Dim Rws As Long, J As Long, W As Long, Tmr As Double
 
 Sheets("BCao").Select:                     Tmr = Timer()
 Set Sh = ThisWorkbook.Worksheets("CSDL")
 Rws = Sh.[b2].CurrentRegion.Rows.Count
 Arr() = Sh.[b2].Resize(Rws, 6).Value
 dArr() = Range([b5], [b5].End(xlDown)).Resize(, 4).Value
 For W = 1 To UBound(dArr())
    For J = 1 To UBound(Arr())
2       If Arr(J, 1) < [e1].Value And Arr(J, Col) = dArr(W, 1) And Arr(J, Cot) = Rng.Value Then
            If Arr(J, 2) = "N" Then
                dArr(W, 2) = dArr(W, 2) + Arr(J, 6)
            ElseIf Arr(J, 2) = "X" Then
                dArr(W, 2) = dArr(W, 2) - Arr(J, 6)
            End If
        End If
3       If Arr(J, 1) >= [e1].Value And Arr(J, Col) = dArr(W, 1) And Arr(J, Cot) = Rng.Value _
            And Arr(J, 1) <= [e2].Value Then
            If Arr(J, 2) = "N" Then
                dArr(W, 3) = dArr(W, 3) + Arr(J, 6)
            ElseIf Arr(J, 2) = "X" Then
                dArr(W, 4) = dArr(W, 4) + Arr(J, 6)
            End If
        End If
    Next J
 Next W
 Range([b5], [b5].End(xlDown)).Resize(, 4).Value = dArr()
 Randomize:                                         [A1].Value = Timer() - Tmr
 [c4].Resize(, 3).Interior.ColorIndex = 34 + 9 * Rnd() \ 1
End Sub

Xin các bạn xem file theo đường dẫn của bài kế tiếp
 
Lần chỉnh sửa cuối:

Bài viết mới nhất

Back
Top Bottom