Code liệt kê các mặt hàng theo hóa đơn ..

Liên hệ QC

AnhThu-1976

Thành viên tích cực
Tham gia
17/10/14
Bài viết
1,058
Được thích
170
Em chào các Thầy/cô và anh chị!
Em có 1 bảng tính T03, trong đó sẽ có các hóa đơn từ cell O2 trở đi (thực tế có rất nhiều, ở đây em lấy 3 ví dụ)
Em muôn lấy số liệu từ sheet T03 sang sheet KQ mong muốn như sau:
Đây là cách em làm thủ công:
1/ Tại sheet T03, đầu tiên Filter cột O, bỏ chọn Blanks
a) copy các mã hàng hóa và tên hàng hóa ở cột B và C, sang sheet KQ paste vào cột K và L
b) Tiếp tục copy số lượng xuất ở cột O (sheet T03) rồi paste vào cột P (sheet KQ)
2/ Copy ngày ở cell O1 sheet T03, rồi paste vào cột B sheet KQ theo các dòng tương ứng
Tương tự: copy số hóa đơn ở cell O2 và mã khách hàng O3 ở sheet T03 paste sang cột F và G ở sheet KQ theo các dòng tương ứng
=> xong cột O, xã filter cột O
tiếp tục sang cột P filter và bỏ blanks và tiếp tục làm như trên ...
Em nhờ các Thầy/cô và anh chị viết code ạ, Em xin cảm ơn!
 

File đính kèm

  • Hoi-LietKe.xlsm
    247.4 KB · Đọc: 17
Dùng mảng duyệt thỏa mãn những cái nào lớn hơn 0 là được mà
 
Upvote 0
Em chào các Thầy/cô và anh chị!
Em có 1 bảng tính T03, trong đó sẽ có các hóa đơn từ cell O2 trở đi (thực tế có rất nhiều, ở đây em lấy 3 ví dụ)
Em muôn lấy số liệu từ sheet T03 sang sheet KQ mong muốn như sau:
Đây là cách em làm thủ công:
1/ Tại sheet T03, đầu tiên Filter cột O, bỏ chọn Blanks
a) copy các mã hàng hóa và tên hàng hóa ở cột B và C, sang sheet KQ paste vào cột K và L
b) Tiếp tục copy số lượng xuất ở cột O (sheet T03) rồi paste vào cột P (sheet KQ)
2/ Copy ngày ở cell O1 sheet T03, rồi paste vào cột B sheet KQ theo các dòng tương ứng
Tương tự: copy số hóa đơn ở cell O2 và mã khách hàng O3 ở sheet T03 paste sang cột F và G ở sheet KQ theo các dòng tương ứng
=> xong cột O, xã filter cột O
tiếp tục sang cột P filter và bỏ blanks và tiếp tục làm như trên ...
Em nhờ các Thầy/cô và anh chị viết code ạ, Em xin cảm ơn!
Viết code mà có filter thì thấy nó bị phụ thuộc.Nên học cách không cần các công cụ của excel.
 
Upvote 0
Bạn chạy thử file bên dưới xem đúng ý chưa nhé
 

File đính kèm

  • Hoi-LietKe.xlsm
    267 KB · Đọc: 27
Upvote 0
Viết code mà có filter thì thấy nó bị phụ thuộc.Nên học cách không cần các công cụ của excel.
Híc, đó là cách mô tả của mình khi lấy số liệu, còn khi viết code thì các anh/ chị có thể dùng cách khác mà
Nói chung là kết quả ra chính xác và nhanh là OK rồi!
 
Upvote 0
Híc, đó là cách mô tả của mình khi lấy số liệu, còn khi viết code thì các anh/ chị có thể dùng cách khác mà
Nói chung là kết quả ra chính xác và nhanh là OK rồi!
Thử code này coi
Mã:
Option Explicit

Sub ABC()
Dim sArr(), Res(), i&, j&, K&
With Sheets("T03")
    i = .Range("B" & Rows.Count).End(3).Row
    j = .Cells(1, Columns.Count).End(1).Column
    sArr = .Range("A1").Resize(i, j).Value
End With
ReDim Res(1 To (UBound(sArr) - 9) * (UBound(sArr, 2) - 14), 1 To 16)
For j = 15 To UBound(sArr, 2)
    For i = 10 To UBound(sArr)
        If sArr(i, j) > 0 Then
            K = K + 1
            Res(K, 2) = sArr(1, j): Res(K, 6) = sArr(2, j)
            Res(K, 7) = sArr(3, j): Res(K, 11) = sArr(i, 2)
            Res(K, 12) = sArr(i, 3): Res(K, 16) = sArr(i, j)
        End If
    Next
Next
If K Then
    Sheets("KQ").Range("A13").Resize(K, 16).Value = Res
End If
End Sub
 
Upvote 0
Thử giải pháp này, dùng Find có thể cải thiện tốc độ nếu dữ liệu vài chục ngàn dòng trở lên
PHP:
Option Explicit
Sub trichxuat()
Application.EnableEvents = False
Dim lr&, lc&, k&, cell As Range, arr(), f, fAdd As String
Worksheets("T03").Activate
lr = Cells(Rows.Count, "B").End(xlUp).Row
lc = Cells(1, Columns.Count).End(xlToLeft).Column
ReDim arr(1 To 65000, 1 To 15)
    Set f = Range("O9", Cells(lr, lc)).Find(what:="*", SearchOrder:=xlByColumns)
    If Not f Is Nothing Then
        fAdd = f.Address
        arr(1, 1) = Cells(1, f.Column).Value2
        arr(1, 5) = Cells(2, f.Column).Value
        arr(1, 6) = Cells(3, f.Column).Value
        arr(1, 10) = Cells(f.Row, 2).Value
        arr(1, 11) = Cells(f.Row, 3).Value
        arr(1, 15) = f.Value
        k = 1
        Do
            Set f = Range("O9", Cells(lr, lc)).FindNext(f)
            If Not f Is Nothing Then
                k = k + 1
                arr(k, 1) = Cells(1, f.Column).Value2
                arr(k, 5) = Cells(2, f.Column).Value
                arr(k, 6) = Cells(3, f.Column).Value
                arr(k, 10) = Cells(f.Row, 2).Value
                arr(k, 11) = Cells(f.Row, 3).Value
                arr(k, 15) = f.Value
            End If
        Loop While f.Address <> fAdd
    End If
Worksheets("KQ").Activate
Range("B3:P10000").ClearContents
Range("B3").Resize(k - 1, 15).Value = arr
Application.EnableEvents = True
End Sub
 
Upvote 0
Xin cảm ơn đến các bạn đã hỗ trợ, code chạy nhanh và chính xác!
 
Upvote 0
Cũng làm mảng nhập xuất tồn này, mà chưa hiểu ý bạn cần làm như thế này để làm gì.

Lúc đầu mình đang hiểu bạn đang cần in phiếu xuất nhập tồn kho theo mã Hàng hay theo Khách hàng.
Nhưng khi nhìn file thì thấy hình như không phải.
 
Upvote 0
Cũng làm mảng nhập xuất tồn này, mà chưa hiểu ý bạn cần làm như thế này để làm gì.

Lúc đầu mình đang hiểu bạn đang cần in phiếu xuất nhập tồn kho theo mã Hàng hay theo Khách hàng.
Nhưng khi nhìn file thì thấy hình như không phải.
Riêng tôi thì file trên, dùng cho nhân viên xuất hàng dễ kiểm soát hơn (tránh âm kho hay bị trùng ...)
Cuối tháng thì kế toán tổng hợp, copy rồi paste để tính giá vốn nhanh chóng ...
Còn bạn muốn làm phiếu xuất kho, hay quản lý gì đó thì tùy mỗi người vận dụng nó
 
Upvote 0
Web KT

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

Back
Top Bottom