Giúp em lập công thức cho phiếu xuất kho và thẻ kho theo mẫu (1 người xem)

  • Thread starter Thread starter nion004
  • Ngày gửi Ngày gửi
Liên hệ QC

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

nion004

Thành viên mới
Tham gia
20/11/12
Bài viết
9
Được thích
1
Tình hình là e mới nhận công việc mới là làm kế toán cho 1 nhà phân phối rượu bia nước giải khát. E có sẵn 1 file excel nhưng muốn biến đổi đi 1 chút chút cho phù hợp với công việc đó là thêm sheet phiếu xuất kho và thẻ kho. Tuy nhiên việc lập công thức dò tìm sao cho thỏa mãn nhiều điều kiện là theo ngày và chuyến thì e bó tay ko bít nà. Rất mong mọi người giúp đỡ e. E có gửi kèm theo file, công thức cần lập ở sheet PXK và TK, trong đó có ghi chú yêu cầu nà-0-/.
 

File đính kèm

Khi dữ liệu nhiều, thì ngay macro cũng ì ạch nữa là công thức.

;;;;;;;;;;; ;;;;;;;;;;; ;;;;;;;;;;; ;;;;;;;;;;;

;;;;;;;;;;; ;;;;;;;;;;;
;;;;;;;;;;;
 
Lần chỉnh sửa cuối:
Upvote 0
Hic bác ChanhTQ ơi thế ko dùng macro thì có lệnh làm ẩn sheet khi ko thoả mãn điều kiện ko? Công việc e làm nó nhập xuất nhiều trong ngày mà những cái này ko tự động mà làm thủ công thì cực lắm. Bác giúp e với
 
Upvote 0
Để tự động mà không dùng macro là không tưởng!

[thongbao]Công việc e làm nó nhập xuất nhiều trong ngày mà những cái này ko tự động mà làm thủ công thì cực lắm. Bác giúp e với[/thongbao]

File trên chưa có fần thẻ kho;

Sẵn đây gởi bạn tham khảo mai sau, 1 khi bạn dấn thân vô VBA
 

File đính kèm

Upvote 0
He he bác ChanhTQ ơi hum qua e vào mò những giúp đỡ của bác trên diễn đàn, e thấy có cái lệnh marco ẩn dòng cột nà. Hì hục mãi nó cũng chạy cho, thích quá, cảm ơn bác nà. Nhân tiện cho e hỏi chút nữa. Mình lọc ra danh sách khách hàng rùi nhưng nếu khách hàng mua nhiều thứ thì nó vẫn hiện ra chi tiết hết theo nhiều dòng. Vậy thì làm thế nào để mỗi dòng trong sheet PXK chỉ là một khách hàng với các hàng hóa ở các cột bên, còn cột tổng tiền là tổng tiền của những hàng hóa đó. E phiền bác nà
 
Upvote 0
[ThongBao]He he bác ChanhTQ ơi. Vậy thì làm thế nào để mỗi dòng trong sheet PXK chỉ là một khách hàng với các hàng hóa ở các cột bên, còn cột tổng tiền là tổng tiền của những hàng hóa đó. E phiền bác nà[/thOngbao]

Bạn Copy macro này chép đè lên toàn bộ cái cũ & vọc tiếp đi!

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Sh As Worksheet, Rng As Range, Cls As Range
 Dim Rws As Long, Col As Byte, Num As Byte
 Dim Ma As String:                              Dim Trung As Boolean  '*'
 
 If Not Intersect(Target, [D5]) Is Nothing Then
    Set Sh = ThisWorkbook.Worksheets("NKNX")
    Rws = Sh.[b6].CurrentRegion.Rows.Count
    Set Rng = Sh.[A5].Resize(Rws, 13)
    Rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sh.Range( _
        "BA1:BB2"), CopyToRange:=Sh.Range("BA5:BH5"), Unique:=False
    
    Sh.[ba6].CurrentRegion.Sort Key1:=Sh.Range("BA6"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    Rows("9:42").Hidden = False
    [c10:bi31].ClearContents
    Set Rng = Sh.[bb6].CurrentRegion.Offset(1)
    Rws = Sh.[bb7].CurrentRegion.Rows.Count
    Application.ScreenUpdating = False
    If Rws > 1 Then
        For Each Cls In Rng(2).Resize(Rws)
            If Cls.Value = "" Then Exit For
            With [c31].End(xlUp).Offset(1)
                Trung = Cls.Value = Cls.Offset(-1).Value   '**=>'
                If Trung Then
                    .Offset(-1, 1).Value = .Offset(-1, 1).Value + Cls.Offset(, 1).Value
                Else
                    .Resize(, 2).Value = Cls.Resize(, 2).Value
                End If                                  '<=|*'
                Ma = Cls.Offset(, 2).Value
                Num = CByte(Right(Ma, 2))
                If Num < 13 Then
                    Col = Num + 4
                ElseIf Num < 39 Then
                    Col = Num - 14
                ElseIf Num < 70 Then
                    Col = Num - 16
                Else
                    Col = Num - 22
                End If
                Cells(.Row + IIf(Trung, -1, 0), Col).Value = Cls.Offset(, 3).Value + _
                    Cells(.Row + IIf(Trung, -1, 0), Col).Value   '***'
            End With
        Next Cls
    End If
    Application.ScreenUpdating = True
    Rws = [c9].End(xlDown).Row
    If Rws >= 32 Then
        Rows("11:30").Hidden = True
    Else
        Rows(Rws + 9 & ":30").Hidden = True
    End If
 End If
End Sub
 
Upvote 0
Bác ChanhTQ ơi!

Bác ChanhTQ ơi! E mò mẫm cái marco bác gửi rùi, nó ko chạy nà. E gửi lại file bác xem giúp cái phiếu xuất kho(PXK), làm thế nào để nó lọc dữ liệu ra như thế nhé. Thank! bác
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Trời ạ! 2 macro sự kiện ở 2 trang tính thì bạn đem đánh chén đi rồi!

Bảo chép đè là chép đè lên macro sự kiện kia mà!
 

File đính kèm

Upvote 0
Bác ChanhTQ ơi, e là nion004 mấy hum vừa rùi nhờ bác giúp lập cho công thức phiếu xuất kho đây. . . ., bác làm đúng như ý e.

Tuy nhiên có một số vấn đề thế này mong bác giúp đỡ típ.

(2) - Thứ nhót: Trong phiếu xuất kho, e để trống từ cột BJ đến BZ, mục đích là sau này thêm hàng mới nhưng e thêm rùi chạy macro bị lỗi nà

(1) - Thứ 2: Khi lọc dữ liệu thì PXK lại hiện cả những hàng nhập nữa. Điều kiện là chỉ nhập những hàng xuất, cụ thể là xuất bán(X-BA) và xuất khác(X-KH) thui

(3) - Thứ 3: Khi xuất bán nhiều trong 1 ngày sau đó tiến hành lọc thì cũng báo lỗi nà

(4) - Nhân tiện đây bác nhắn cho e phone number của bác để lúc nào e cảm ơn và . . . nà
Bác giúp e típ nhé!

(1) Đúng là chuyện này mình đã ngờ ngợ, đến nay bạn mới nói rõ & đã sửa trong file

(2) Thêm mã mới thì 2 số cuối của mã sẽ fải lớn hơn số 87

(3) Chuyên này bạn cho biết trước đâu kia chứ? Hiện tại đã tăng đến gần 100 dòng;
Nếu vẫn chưa đủ thì tham khảo sửa tiếp thử xem (!)

(4) Số fon thì tự tìm sẽ thấy!
& xem trong file đính kèm
 

File đính kèm

Upvote 0
Giúp sửa marco file xuất kho

Tình hình là e có 1 file excel về kho của bác Hoàng Danh trên diễn đàn cho. E đã cải biên đi chút cho phù hợp với công việc. Sau 1 thời gian nhờ các bác trên diễn đàn giúp đỡ file này đã gần hoàn chỉnh. Hi những vẫn còn vấn đề nữa mong bác nào am hiểu về marco giúp e típ nhé! Cụ thể là trong sheet PXK đang lọc theo 2 ĐK là ngày và chuyến nhưng bi giờ e muốn thêm 1 đk lọc nữa là thêm số chuyến như mẫu. Làm thế nào để cột phụ BL trong sheet NKNX nó tự động nhảy vậy? Các bác cao thủ giúp e-0-/.
 

File đính kèm

Upvote 0
Bạn chép macro sau đè lên macro cũ với các chú í sau đây

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Sh As Worksheet, Rng As Range, Cls As Range
 Dim Rws As Long, Col As Byte, Num As Byte
 Dim Ma As String:                              Dim Trung As Boolean
 
 If Not Intersect(Target, [D5]) Is Nothing Then
'    Set Sh = ThisWorkbook.Worksheets("NKNX")    '
'    Rws = Sh.[e7].CurrentRegion.Rows.Count      '
    Set Sh = ThisWorkbook.Worksheets("NKNX")
    Rws = Sh.[c7].CurrentRegion.Rows.Count
5    Set Rng = Sh.[C5].Resize(Rws, 14)
6    Rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sh.Range( _
        "BD1:Bg2"), CopyToRange:=Sh.Range("BD5:Bl5"), Unique:=False         '**'
    Sh.[bd6].CurrentRegion.Sort Key1:=Sh.Range("Bd6"), Order1:=xlAscending, _
        Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        
    Rows("9:112").Hidden = False
    [c11:ea31].ClearContents            '*'
    Set Rng = Sh.[be6].CurrentRegion.Offset(1)
    Rws = Sh.[be7].CurrentRegion.Rows.Count
    Application.ScreenUpdating = False
    If Rws > 1 Then
        For Each Cls In Rng(2).Resize(Rws)
            If Cls.Value = "" Then Exit For
            With [c111].End(xlUp).Offset(1)         '7'
                Trung = Cls.Value = Cls.Offset(-1).Value
                If Trung Then
                    .Offset(-1, 1).Value = .Offset(-1, 1).Value + Cls.Offset(, 1).Value
                Else
                    .Resize(, 2).Value = Cls.Resize(, 2).Value
                End If
                Ma = Cls.Offset(, 2).Value
                Num = CByte(Right(Ma, 2))
                If Num < 13 Then
                    Col = Num + 4
                ElseIf Num < 39 Then
                    Col = Num - 14
                ElseIf Num < 70 Then
                    Col = Num - 16
                Else
                    Col = Num - 22
                End If
                Cells(.Row + Trung, Col).Value = _
                    Cls.Offset(, 3).Value + Cells(.Row + Trung, Col).Value
            End With
        Next Cls
    End If
 Application.ScreenUpdating = True
    Rws = [c9].End(xlDown).Row
    If Rws >= 110 Then
        Rows("11:110").Hidden = True
    Else
        Rows(Rws + 20 & ":110").Hidden = True
    End If
 End If
End Sub

Chú í:
(1) Các dòng lệnh có đánh số đã được sửa chữa;
(2) Nếu khi chạy mà còn báo lỗi ở dòng lệnh số 6, thì bạn đến các ô [Bg1] & [bl5] của trang 'NKXN' & nhập chuỗi 'Songay' vô chúng (thay vì xài công thức)
(3) 2 dòng lệnh đã vô hiệu hóa chắc dư(?)

Chúc thành công!
 
Upvote 0
(1) Hiện thì cột BL trong sheet NKNX đã hiển thị nhưng ở sheet PXK nó vẫn chưa lọc được điều kiện về số chuyến.
Trình tự là mình chọn ngày, số chuyến và sau đó chọn chuyến thì nó sẽ lọc cho mình theo cả 3 đk là

(2) Khi lọc thì nó phân loại khách hàng theo thứ tự abc,
mình muốn nó lọc theo thứ tự theo như dữ liệu đã nhập trong sheet NKNX được ko nà


(1)
Hiện macro sự kiện đang đang dính kết với ô [D5]; & chuyện fát sinh iêu cầu lọc theo số chuyến là mới đây, nên đang ở [D6]
Vậy nên có các cách sau để thỏa iêu cầu của bạn:

(A) Chọn lần lượt [Ngày]=>[Số chuyến] => [Chuyến]
Thì bạn đổi câu lệnh
Mã:
 If Not Intersect(Target, [D5]) Is Nothing Then
thành
PHP:
 If Not Intersect(Target, [D6]) Is Nothing Then

(B) Bạn thêm trên dòng 5 của trang tính này 1 dòng;
Dời nội dung dòng 6 lên dòng mới thêm & delete dòng 6 này đi;

Lúc đó trình tự sẽ là Chọn lần lượt [Ngày]=>[Chuyến] => [Số chuyến]

(C) Để nguyên i xì thiết kế trang tính; trình tự chọn lúc này là
Chọn lần lượt [Ngày]=>[Chuyến] => [Số Chuyến]
(Có nghĩa là [D4] => [D6] ==>> [D5])

Bạn & duy bạn toàn quyền chọn 1 trong 3)

(2) Bạn vô hiệu hóa dòng lệnh ngay dưới dòng lệnh số 6 bằng chỉ dấu nháy đơn vô đầu dòng lệnh; Nhưng chỉ với 1 lưu í nhỏ là 2 dòng lệnh này đều cùng viết trên hai hàng đó nha.
(Tham khào bài trên.)


Chúc thành công!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
HYen 17 ơi! Mình thử lại rùi vẫn có chút trục trặc nà
1. Mình làm theo hướng dẫn của bạn thì nó vẫn chạy đó nhưng vẫn chỉ là lọc được theo 2 đk là ngày và chuyến thui.Mình thấy cột BL bên sheet NKNX vẫn lẫn số chuyến với nhau. À mà có vấn đề này mình chưa nói, đó là cột BL đó là mình tự động đánh thêm vào, ko bít cách thêm như vậy có đúng ko mà mình đặt công thức ở ô BG1 nó ko ra được mà vẫn chỉ hiện thị là "=BL5" thui. Có phải vì đó mà nó vẫn ko lọc thêm đc đk về số chuyến hay ko?
2. Mình cũng đã đánh dấu nháy trước dòng lệnh " sh.[BD6]....." nhưng khi chạy marco nó hiện lỗi và đánh dấu màu vàng ngay dòng đầu tiên của marco nà
3. Tiện đây mình cũng hỏi lun 1 vấn đề nữa là ở bên sheet PXK, marco ko nhảy được ra số dư đầu kỳ, số dư đầu kỳ lấy bên cột F của sheet NXT, hay cái này mình phải tự đánh vào nhỉ hi
 
Upvote 0
Đúng là hướng dẫn fần B là còn thiếu 1 công đoạn, nên báo lỗi; Xin lỗi bạn!

(1) & (2) xem trong file;

(3) Hãy cho biết lấy xong số dư đầu kỳ rồi chép vô đâu vậy?
 

File đính kèm

Upvote 0
Hic vẫn chưa được bạn ah! vẫn chỉ lọc đc theo 2 đk là số ngày và chuyến thui, đk về số chuyến vẫn chưa lọc đc nà
À mà mình viết nhầm, số dư đk bên sheet TK chứ ko phải sheet PXK
Vooc jup mình nhé!
 
Upvote 0

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

Back
Top Bottom