Chi Tiết Xuất của Đơn hàng

Liên hệ QC

LuuAnh980

Thành viên tiêu biểu
Tham gia
28/9/22
Bài viết
452
Được thích
104
Giới tính
Nữ
Chào các anh chị.
Em có file, trong file em nhờ các anh chị viết code khi em gõ Đơn hàng và Mã Số hàng vào B3 và C3 của sheet "ChiTiet" thì lọc ra chi tiết xuất của Đơn hàng và mã số hàng đó. Trong file em có ví dụ ạ.
 

File đính kèm

  • chitietxuat.xlsb
    19.6 KB · Đọc: 16
Chào các anh chị.
Em có file, trong file em nhờ các anh chị viết code khi em gõ Đơn hàng và Mã Số hàng vào B3 và C3 của sheet "ChiTiet" thì lọc ra chi tiết xuất của Đơn hàng và mã số hàng đó. Trong file em có ví dụ ạ.
Các mã số trùng nhau có xắp xếp gần nhau không hay là 1 thằng 1 nơi
 
Upvote 0
Sắp xếp theo ngày tăng dần đó bạn. Có thể trong một ngày cùng mã số cũng liệt kê ra. Như trong ví dụ ngày 18-Aug-22 mã số 0820120 2 lần số lượng 4 và 1 . (dòng 11 và 12).
Mong các anh chị giúp đỡ.
 
Upvote 0
Như là mình, thì sẽ chia nhiệm vụ này ra làm 3 công đoạn:
(1) Lọc Advanced & kết quả sẽ như sau:
NgaySo PhieuMa SoDien GiaiSo Luong
18-Aug-22​
SP0816VTF60615606x1500x6000
98​
18-Aug-22​
SP0816VTF60520605x2000x6000
99​
18-Aug-22​
SP0816VTF608201208x2000x12000
100​
18-Aug-22​
SP0816VTF6202012020x2000x12000
101​
18-Aug-22​
SP0816VTF60815608x1500x6000
102​
18-Aug-22​
SP0816VTF608201208x2000x12000
104​
19-Aug-22​
SP0817VTF60520605x2000x6000
105​
19-Aug-22​
SP0817VTF60515605x1500x6000
106​
19-Aug-22​
SP0817VTF6252012025x2000x12000
107​
19-Aug-22​
SP0817VTF6102012010x2000x12000
109​
19-Aug-22​
SP0817VTF608201208x2000x12000
110​
19-Aug-22​
SP0817VTF60815608x1500x6000
111​
20-Aug-22​
SP0818VTF60515605x1500x6000
113​
20-Aug-22​
SP0818VTF60815608x1500x6000
114​
20-Aug-22​
SP0818VTF6102012010x2000x12000
118​

(2) Sắp xếp dữ liệu lọc được theo cột [Mã số], thu được kết quả như sau:

NgaySo PhieuMa SoDien GiaiSo Luong
19-Aug-22​
SP0817VTF60515605x1500x6000
106​
20-Aug-22​
SP0818VTF60515605x1500x6000
113​
18-Aug-22​
SP0816VTF60520605x2000x6000
99​
19-Aug-22​
SP0817VTF60520605x2000x6000
105​
18-Aug-22​
SP0816VTF60615606x1500x6000
98​
18-Aug-22​
SP0816VTF60815608x1500x6000
102​
19-Aug-22​
SP0817VTF60815608x1500x6000
111​
20-Aug-22​
SP0818VTF60815608x1500x6000
114​
18-Aug-22​
SP0816VTF608201208x2000x12000
100​
18-Aug-22​
SP0816VTF608201208x2000x12000
104​
19-Aug-22​
SP0817VTF608201208x2000x12000
110​
19-Aug-22​
SP0817VTF6102012010x2000x12000
109​
20-Aug-22​
SP0818VTF6102012010x2000x12000
118​
18-Aug-22​
SP0816VTF6202012020x2000x12000
101​
19-Aug-22​
SP0817VTF6252012025x2000x12000
107​


(3) bước cuối là thêm dòng 'ToTal' theo ý
Ta có thể tham khảo theo #9 ở đây: http://www.danketoan.com/threads/cac-cach-them-dong-moi-vo-1-csdl-co-so-du-lieu-da-san.182915/
Nếu bạn đồng ý ta sẽ tiếp tục!
 
Upvote 0
Tức là không dùng code hả Thầy @SA_DQ , Thầy viết code dùm em với.
 
Upvote 0
Chào các anh chị.
Em có file, trong file em nhờ các anh chị viết code khi em gõ Đơn hàng và Mã Số hàng vào B3 và C3 của sheet "ChiTiet" thì lọc ra chi tiết xuất của Đơn hàng và mã số hàng đó. Trong file em có ví dụ ạ.
Thử code hên sui.
Mã:
Sub hensui()
    Dim i As Long, lr As Long, arr, kq, dk As String, soma As String, tong As Double, dks As String, a As Long
    With Sheets("Xuat")
        lr = .Range("C" & Rows.Count).End(xlUp).Row
        arr = .Range("C2:K" & lr).Value
    End With
    With Sheets("chitiet")
        dk = .Range("B3").Value
        soma = .Range("C3").Value
        ReDim kq(1 To UBound(arr), 1 To 5)
        For i = 1 To UBound(arr)
            If CStr(arr(i, 3)) = dk And CStr(arr(i, 4)) = soma Then
               a = a + 1
               If a = 1 Then dks = arr(i, 5)
               If dks = arr(i, 5) Then
                  kq(a, 1) = arr(i, 1)
                  kq(a, 2) = arr(i, 2)
                  kq(a, 3) = arr(i, 5)
                  kq(a, 4) = arr(i, 6)
                  kq(a, 5) = arr(i, 9)
                  tong = tong + arr(i, 9)
               Else
                  kq(a, 4) = "ToTal"
                  kq(a, 5) = tong
                  tong = 0: a = a + 1
                  kq(a, 1) = arr(i, 1)
                  kq(a, 2) = arr(i, 2)
                  kq(a, 3) = arr(i, 5)
                  kq(a, 4) = arr(i, 6)
                  kq(a, 5) = arr(i, 9)
                  tong = tong + arr(i, 9)
                  dks = arr(i, 5)
               End If
            End If
     Next i
            a = a + 1
            kq(a, 4) = "ToTal"
            kq(a, 5) = tong
            lr = .Range("D" & Rows.Count).End(xlUp).Row
            If lr > 5 Then .Range("A6:E" & lr).ClearContents
            If a Then .Range("A6:E6").Resize(a).Value = kq
   End With
End Sub
 
Upvote 0
Cám ơn anh @snow25 , chiều em thử, chắc hên quá anh ơi.
 
Upvote 0
Gửi bạn tham khảo thêm, sự kiện Change Sheet "ChiTiet"
==> Bạn thay đổi dữ liệu ở ô B3 và C3 và kiểm tra kết quả nhé!
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B3:C3")) Is Nothing Then
        Dim Arr(), Res(1 To 10000, 1 To 5), i As Long, Lr1 As Long
        Dim k As Long, Lr As Long, Dh As String, Smh As String
        Dim Dic As Object, Key As String, Arr1(), a As Long, b As Long
        On Error Resume Next
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
        Set Dic = CreateObject("Scripting.Dictionary")
        With Sheets("ChiTiet")
            Dh = .Range("B3").Value
            Smh = .Range("C3").Value
            .Range("A6:E100000").Delete
        End With
        With Sheets("Xuat")
            Lr = .Range("C" & Rows.Count).End(xlUp).Row
            Arr = .Range("C2:O" & Lr).Value
            For i = 1 To UBound(Arr)
                If Arr(i, 3) = Dh And Arr(i, 4) = Smh Then
                    k = k + 1
                    Res(k, 1) = Arr(i, 1): Res(k, 2) = Arr(i, 2)
                    Res(k, 3) = Arr(i, 5): Res(k, 4) = Arr(i, 6)
                    Res(k, 5) = Arr(i, 9)
                End If
            Next i
        End With
        With Sheets("ChiTiet")
            If k Then
                .Range("A6").Resize(k, 5).Value = Res
                Lr1 = .Range("A" & Rows.Count).End(xlUp).Row
                With Range("A5:E" & Lr1)
                    .Sort .Cells(5, 3), 1, Header:=xlGuess
                End With
                Arr1 = .Range("C6:C" & Lr1).Value
                For i = 1 To Lr1
                    Key = Arr1(i, 1)
                    If Not Dic.exists(Key) Then
                        b = b + 1
                        Dic.Add (Key), b
                    End If
                Next i
                a = Dic.Count
                For i = 6 To Lr1 + a
                    If .Cells(i + 1, 3) <> .Cells(i, 3) Then
                        .Rows(i + 1).Insert
                        .Cells(i + 1, 4) = "TOTAL"
                        .Cells(i + 1, 5) = WorksheetFunction.SumIf(.Range("C:C"), .Range("C" & i), .Range("E:E"))
                        i = i + 1
                    End If
                Next i
            End If
            .Range("A5").CurrentRegion.Borders.LineStyle = 1
        End With
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
        Set Dic = Nothing
    End If
End Sub
 

File đính kèm

  • chitietxuat.xlsb
    29.2 KB · Đọc: 8
Upvote 0
Em có thử code của 2 anh rồi:
1/ code của anh @snow25 chưa đúng ý em rồi. Code của anh cứ một dòng mã số là Total. Ý em là cùng mã số thì cuối dong của mã số đó mới Total
Chitiet.png
2/ code của anh @Bienhoa84 đã đúng ý em rồi ạ.
Chitiet_1.png
Cám ơn sự giúp đỡ của 2 anh ạ.
 
Upvote 0
Tức là không dùng code hả Thầy @SA_DQ , Thầy viết code dùm em với.
Là dùng VBA với trình độ tối thiểu:
Bước 1 & bước 2: Ghi bằng bộ thu macro sau đó chỉnh sửa lại;
Bước 3: Tham khảo trong file đính kèm; Hiện tại các kết quả đang bề bộn trên trang tính, bạn kiểm soát kết quả xem đúng chưa; Chỉ sau đó hiệu chỉnh như mong muốn
 

File đính kèm

  • Filter.rar
    38.3 KB · Đọc: 8
Upvote 0
tới anh @Bienhoa84 : anh có thể chỉnh code cho chữ "ToTal" canh phải và số của dòng "Total" có màu đỏ đậm được không anh.
tới thầy @SA_DQ : Cám ơn thầy nhiều ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
tới anh @Bienhoa84 : anh có thể chỉnh code cho chữ "ToTal" canh phải và số của dòng "Total" có màu đỏ đậm được không anh.
tới thầy @SA_DQ : Cám ơn thầy nhiều ạ.
Bạn thay bằng code này
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B3:C3")) Is Nothing Then
        Dim Arr(), Res(1 To 10000, 1 To 5), i As Long, Lr1 As Long
        Dim k As Long, Lr As Long, Dh As String, Smh As String
        Dim Dic As Object, Key As String, Arr1(), a As Long, b As Long
        On Error Resume Next
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
        Set Dic = CreateObject("Scripting.Dictionary")
        With Sheets("ChiTiet")
            Dh = .Range("B3").Value
            Smh = .Range("C3").Value
            .Range("A6:E100000").Delete
        End With
        With Sheets("Xuat")
            Lr = .Range("C" & Rows.Count).End(xlUp).Row
            Arr = .Range("C2:O" & Lr).Value
            For i = 1 To UBound(Arr)
                If Arr(i, 3) = Dh And Arr(i, 4) = Smh Then
                    k = k + 1
                    Res(k, 1) = Arr(i, 1): Res(k, 2) = Arr(i, 2)
                    Res(k, 3) = Arr(i, 5): Res(k, 4) = Arr(i, 6)
                    Res(k, 5) = Arr(i, 9)
                End If
            Next i
        End With
        With Sheets("ChiTiet")
            If k Then
                .Range("A6").Resize(k, 5).Value = Res
                Lr1 = .Range("A" & Rows.Count).End(xlUp).Row
                With Range("A5:E" & Lr1)
                    .Sort .Cells(5, 3), 1, Header:=xlGuess
                End With
                Arr1 = .Range("C6:C" & Lr1).Value
                For i = 1 To Lr1
                    Key = Arr1(i, 1)
                    If Not Dic.exists(Key) Then
                        b = b + 1
                        Dic.Add (Key), b
                    End If
                Next i
                a = Dic.Count
                For i = 6 To Lr1 + a
                    If .Cells(i + 1, 3) <> .Cells(i, 3) Then
                        .Rows(i + 1).Insert
                        .Cells(i + 1, 4) = "TOTAL"
                        .Cells(i + 1, 4).HorizontalAlignment = xlRight
                        .Cells(i + 1, 4).Font.Bold = True
                         .Cells(i + 1, 4).Interior.ColorIndex = 27
                        .Cells(i + 1, 5) = WorksheetFunction.SumIf(.Range("C:C"), .Range("C" & i), .Range("E:E"))
                        .Cells(i + 1, 5).Font.Bold = True
                        .Cells(i + 1, 5).Font.ColorIndex = 3
                        .Cells(i + 1, 5).Interior.ColorIndex = 27
                        i = i + 1
                    End If
                Next i
            End If
            .Range("A5").CurrentRegion.Borders.LineStyle = 1
        End With
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
        Set Dic = Nothing
    End If
End Sub
 

File đính kèm

  • chitietxuat.xlsb
    32.1 KB · Đọc: 12
Upvote 0
Cám ơn anh @Bienhoa84 , cột ngày của em có định dạng dd-mmm-yy và cột mã số của em là dạng Text thì chỉnh code sao anh.
 
Upvote 0
cột mã số đã là dạng Text, nhưng sao bị mất số 0 ở đầu anh @Bienhoa84 ơi, ví dụ mã số bên sheet Xuat là 061560 qua bên sheet chitiet là 61560, mong anh xem lại giúp em.
 
Upvote 0
Web KT

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

Back
Top Bottom