Xuất dữ liệu thông tin khi có mã sản phẩm trùng nhau.

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

hoangtran1176

Thành viên mới
Tham gia
30/7/22
Bài viết
31
Được thích
12
Chào mọi người.
Nhờ mọi người hỗ trợ giúp có thể lập trình VBA để xuất thông tin khi có mã sản phẩm trùng nhau với ạ, trong file dính kèm. Dùng pivot có 1 số hạn chế nên mình không dùng ạ.
Mình cảm ơn
 

File đính kèm

  • 1.xlsx
    55.3 KB · Đọc: 16
Chào mọi người.
Nhờ mọi người hỗ trợ giúp có thể lập trình VBA để xuất thông tin khi có mã sản phẩm trùng nhau với ạ, trong file dính kèm. Dùng pivot có 1 số hạn chế nên mình không dùng ạ.
Mình cảm ơn
Ít nhất cũng nêu các hạn chế ấy ra.
Chứ bảo người ta cặm cụi viết code, chạm vào các hạn chế ấy lại phải viết lại à?
 
Upvote 0
Ít nhất cũng nêu các hạn chế ấy ra.
Chứ bảo người ta cặm cụi viết code, chạm vào các hạn chế ấy lại phải viết lại à?
Do mình hay cập nhật thêm dữ liệu thô thường xuyên nên khi dùng pivot hơi mất thời gian để làm mới lại, công thêm nếu cột mã không trùng thì không có xuất khi đó mình không biết được pivot có đang đúng hay không.
 
Upvote 0
Chào mọi người.
Nhờ mọi người hỗ trợ giúp có thể lập trình VBA để xuất thông tin khi có mã sản phẩm trùng nhau với ạ, trong file dính kèm. Dùng pivot có 1 số hạn chế nên mình không dùng ạ.
Mình cảm ơn
Trong khi chờ đợi code, nếu dùng Office 365 hãy tham khảo cách không dùng VBA.
B1: Dùng cột phụ : Ví dụ cột L/Sheet Raw. Tại L5=COUNTIF($I$5:$I$606;$I5)===> Fill down
B2: Tại B13/ sheet xuat =FILTER(Raw!A5:K606;Raw!L5:L606>1), ==> Enter để có được kết quả.
 

File đính kèm

  • 1.xlsx
    63 KB · Đọc: 7
Upvote 0
Trong khi chờ đợi code, nếu dùng Office 365 hãy tham khảo cách không dùng VBA.
B1: Dùng cột phụ : Ví dụ cột L/Sheet Raw. Tại L5=COUNTIF($I$5:$I$606;$I5)===> Fill down
B2: Tại B13/ sheet xuat =FILTER(Raw!A5:K606;Raw!L5:L606>1), ==> Enter để có được kết quả.
Hix, mình không dùng Office 365 ạ, bản này của mình không xài được FILTER.
 
Upvote 0
Tội nghiệp người ta chờ mỏi mòn con mắt quý vị ơi. Mần ơn code giùm đi.
Ủa mà có ai biết đầu ra là cái gì đâu mà đòi code.
 
Upvote 0
Mở sheet raw thay đổi hoặc thêm dữ liệu..
Qua sheet xuat đã được cập nhật...
 

File đính kèm

  • 2222.xlsm
    72 KB · Đọc: 23
Upvote 0
Hay vậy bạn, chỉ mình cách hỏi chatGPT sao mà nó làm code cho mình vậy???
Bạn giải thích theo ý bạn muốn cống gắng thật logic và chi tết nhé. Nó viết cho mình gần 20 đoạn code mới đúng yêu cầu =)), nếu bạn đủ kiên trì nhẫn nại hỏi thì cũng ra ak bạn.
 
Upvote 0
Bạn giải thích theo ý bạn muốn cống gắng thật logic và chi tết nhé. Nó viết cho mình gần 20 đoạn code mới đúng yêu cầu =)), nếu bạn đủ kiên trì nhẫn nại hỏi thì cũng ra ak bạn.
Bạn xài bẳn nào, mình không tiền xài bản free, nên không được như ý.
 
Upvote 0
Bạn xài được rồi thì gửi code lên anh em xài ké với nào!
 
Upvote 0
Code đây nhé bạn

Sub CopyDuLieu()
Dim wsSource As Worksheet
Dim wsDestination As Worksheet
Dim lastRow As Long
Dim i As Long, j As Long, destRow As Long
Dim dict As Object
Dim sourceRange As Range, destRange As Range
Dim cell As Range
Dim sourceRow As Range
Dim key As Variant

' Gán các worksheet cho bien
Set wsSource = ThisWorkbook.Sheets("Raw")
Set wsDestination = ThisWorkbook.Sheets("xuat")

' Xóa du lieu hien có trên Xuat, nhung không xóa tiêu d? c?t
wsDestination.Rows("3:" & wsDestination.Rows.Count).ClearContents

' Kh?i t?o dictionary d? luu tr? s? l?n xu?t hi?n c?a m?i giá tr? trong c?t C
Set dict = CreateObject("Scripting.Dictionary")

' T́m hàng cu?i cùng trong c?t C c?a Sheet1
lastRow = wsSource.Cells(wsSource.Rows.Count, "J").End(xlUp).Row

' L?p qua d? li?u trên c?t C c?a Sheet1 và t?o danh sách các hàng c?n xu?t
For i = 4 To lastRow
If Not dict.exists(wsSource.Cells(i, "J").Value) Then
' N?u giá tr? chua t?n t?i trong dictionary, thêm vào dictionary
dict.Add wsSource.Cells(i, "J").Value, 1
Else
' N?u giá tr? dă t?n t?i trong dictionary, tang s? l?n xu?t hi?n lên 1
dict(wsSource.Cells(i, "J").Value) = dict(wsSource.Cells(i, "J").Value) + 1
End If
Next i

' Xu?t các hàng t? danh sách c?n xu?t ra Sheet2
destRow = 3 ' B?t d?u t? hàng th? 2 trên Sheet2
For Each key In dict.keys
If dict(key) > 1 Then
' Xu?t t?t c? các hàng n?u có mă trùng
For i = 1 To lastRow
If wsSource.Cells(i, "J").Value = key Then
Set sourceRange = wsSource.Rows(i)
sourceRange.Copy wsDestination.Rows(destRow)
destRow = destRow + 1
End If
Next i
End If
Next key

' Xóa d?i tu?ng dictionary kh?i b? nh?
Set dict = Nothing

MsgBox "Hoàn thành!"
End Sub
 
Upvote 0
Nên đưa vào thẻ code cho gọn.
Mã:
Sub CopyDuLieu()
    Dim wsSource As Worksheet
    Dim wsDestination As Worksheet
    Dim lastRow As Long
    Dim i As Long, j As Long, destRow As Long
    Dim dict As Object
    Dim sourceRange As Range, destRange As Range
    Dim cell As Range
    Dim sourceRow As Range
    Dim key As Variant
  
    ' Gán các worksheet cho bien
    Set wsSource = ThisWorkbook.Sheets("Raw")
    Set wsDestination = ThisWorkbook.Sheets("xuat")
  
    ' Xóa du lieu hien có trên Xuat, nhung không xóa tiêu d? c?t
    wsDestination.Rows("3:" & wsDestination.Rows.Count).ClearContents
  
    ' Kh?i t?o dictionary d? luu tr? s? l?n xu?t hi?n c?a m?i giá tr? trong c?t C
    Set dict = CreateObject("Scripting.Dictionary")
  
    ' T́m hàng cu?i cùng trong c?t C c?a Sheet1
    lastRow = wsSource.Cells(wsSource.Rows.Count, "J").End(xlUp).Row
  
    ' L?p qua d? li?u trên c?t C c?a Sheet1 và t?o danh sách các hàng c?n xu?t
    For i = 4 To lastRow
        If Not dict.exists(wsSource.Cells(i, "J").Value) Then
            ' N?u giá tr? chua t?n t?i trong dictionary, thêm vào dictionary
            dict.Add wsSource.Cells(i, "J").Value, 1
        Else
            ' N?u giá tr? dă t?n t?i trong dictionary, tang s? l?n xu?t hi?n lên 1
            dict(wsSource.Cells(i, "J").Value) = dict(wsSource.Cells(i, "J").Value) + 1
        End If
    Next i
  
    ' Xu?t các hàng t? danh sách c?n xu?t ra Sheet2
    destRow = 3 ' B?t d?u t? hàng th? 2 trên Sheet2
    For Each key In dict.keys
        If dict(key) > 1 Then
            ' Xu?t t?t c? các hàng n?u có mă trùng
            For i = 1 To lastRow
                If wsSource.Cells(i, "J").Value = key Then
                    Set sourceRange = wsSource.Rows(i)
                    sourceRange.Copy wsDestination.Rows(destRow)
                    destRow = destRow + 1
                End If
            Next i
        End If
    Next key
  
    ' Xóa d?i tu?ng dictionary kh?i b? nh?
    Set dict = Nothing
  
    MsgBox "Hoàn thành!"
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom