Kết quả 1 đến 10 của 10

Chủ đề: tong hợp dữ liệu từ nhiêu sheet cộng những mã trùng

  1. #1
    gialinhacbd Guest

    tong hợp dữ liệu từ nhiêu sheet cộng những mã trùng

    mình có 1 file có nhiều sheet giờ muốn tổng hợp lại thành 1 sheet. nhưng yêu cầu là trong những sheet đó có những dữ liệu nào giống nhau sẽ tự động cộng lại thành một và cũng chỉ xuất hiện 1 lần trong bản tổng hợp và sẽ lấy tất cả dữ liệu của các sheet.minh ko rành về vb nen mong các bạn giúp đỡ
    trong bản sẽ lấy từ cột A--->Q
    còn điều kiện giống nhau là từ cột B-->E

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi chuotchuix
    mình có 1 file có nhiều sheet giờ muốn tổng hợp lại thành 1 sheet. nhưng yêu cầu là trong những sheet đó có những dữ liệu nào giống nhau sẽ tự động cộng lại thành một và cũng chỉ xuất hiện 1 lần trong bản tổng hợp và sẽ lấy tất cả dữ liệu của các sheet.minh ko rành về vb nen mong các bạn giúp đỡ
    trong bản sẽ lấy từ cột A--->Q
    còn điều kiện giống nhau là từ cột B-->E
    Cái này thì dễ thôi, chỉ cần xài hàm sumifs là bạn có thể làm được.
    Nhưng tại sheet tổng, 4 cột B->E của bạn phải có danh sách các mã duy nhất của tất cả các sheet con.
    Từ đó mà sumifs lại thôi.

  3. #3
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    nếu có danh sách 4 cột B--> E thì sẽ ko nói làm gì. tại sheet 1 -->sheet 12 mình ko biết có những mã nào trùng và các sheet ko biết có dữ liệu bằng nhau ko và các sheet nào có những dữ liệu nào. nên giờ mình muốn tự động sẽ trích dẫn dữ liệu từ cột B-->E từ 12 sheet đó và những dữ liệu nào trùng sẽ tự động cộng lại theo các cột và xuất hiện 1 còn mã nào ko trùng thì hiện bình thường

  4. #4
    phuongdtn Guest
    Trích dẫn Gửi bởi chuotchuix
    mình có 1 file có nhiều sheet giờ muốn tổng hợp lại thành 1 sheet. nhưng yêu cầu là trong những sheet đó có những dữ liệu nào giống nhau sẽ tự động cộng lại thành một và cũng chỉ xuất hiện 1 lần trong bản tổng hợp và sẽ lấy tất cả dữ liệu của các sheet.minh ko rành về vb nen mong các bạn giúp đỡ
    trong bản sẽ lấy từ cột A--->Q
    còn điều kiện giống nhau là từ cột B-->E
    bạn dùng thử code này xem:

    Mã nguồn PHP:
    Sub TONGHOP()Dim d As ObjectDim data, tamDim i, j, k, h, maSet d = CreateObject("Scripting.Dictionary")ReDim tam(1 To 65000, 1 To 17)For i = 1 To Worksheets.Count If Sheets(i).Name <> "tonghop" Then With Sheets(i) data = .Range("A5:Q" & .Range("A65000").End(3).Row - 1) For j = 1 To UBound(data) ma = data(j, 2) & data(j, 3) & data(j, 4) & data(j, 5) If Len(ma) Then If Not d.exists(ma) Then k = k + 1 d.Add ma, k For h = 1 To 17 tam(k, h) = data(j, h) Next Else For h = 6 To 17 tam(d.Item(ma), h) = tam(d.Item(ma), h) + data(j, h) Next End If End If Next End With End If NextSheet13.Range("A5").Resize(k, 17) = tamEnd Sub  

  5. #5
    tddhcm148 Guest
    Trích dẫn Gửi bởi chuotchuix
    nếu có danh sách 4 cột B--> E thì sẽ ko nói làm gì. tại sheet 1 -->sheet 12 mình ko biết có những mã nào trùng và các sheet ko biết có dữ liệu bằng nhau ko và các sheet nào có những dữ liệu nào. nên giờ mình muốn tự động sẽ trích dẫn dữ liệu từ cột B-->E từ 12 sheet đó và những dữ liệu nào trùng sẽ tự động cộng lại theo các cột và xuất hiện 1 còn mã nào ko trùng thì hiện bình thường
    bạn kiểm tra nha, số gì mà quá trời, ai kiểm nổi

    Mã:
    Sub tonghop()
    Dim arr As Variant, kq(1 To 60000, 1 To 17), i, j, k As Long, ws As Worksheet, d As Object
    Set d = CreateObject("Scripting.Dictionary")
    For Each ws In Worksheets
    If ws.Name <> "tonghop" Then
    With ws
        lr = .[c10000].End(3).Row - 5
        arr = .[a6].Resize(lr, 17).Value
    End With
    For i = 1 To UBound(arr)
        If IsEmpty(arr(i, 1)) Then Exit For
        If Not d.exists(arr(i, 1)) Then
           k = k + 1
           d.Add arr(i, 1), k
           For j = 1 To 17
            kq(k, j) = arr(i, j)
           Next
        Else
            For j = 6 To 17
                If IsNumeric(arr(i, j)) Then kq(d.Item(arr(i, 1)), j) = kq(d.Item(arr(i, 1)), j) + arr(i, j)
            Next
        End If
    Next
    End If
    Next
    If k Then
        With Sheets("tonghop")
            .[a5].Resize(10000, 17).Clear
            .[a5].Resize(k, 17).Value = kq
        End With
    End If
    
    End Sub

  6. #6
    inoviss Guest
    Trích dẫn Gửi bởi Let'GâuGâu
    bạn kiểm tra nha, số gì mà quá trời, ai kiểm nổi
    [/code]
    Kiểm tra thử giúp bạn Chủ topic là: Code của Let'GâuGâu hình như chưa chính xác.
    Code của bạn @thanh_tks chạy đúng rùi đó. Tôi test thử với Hàm Sumifs của tất cả các tháng

    (Với hàm thì chỉ đếm được khi cả 4 cột B->E cùng có điều kiện, có nghĩa là không rỗng, chứ rỗng hất kỳ 1 cột thì hàm sumifs không đếm được)

  7. #7
    mobilecity Guest
    Trích dẫn Gửi bởi hpkhuong
    Kiểm tra thử giúp bạn Chủ topic là: Code của Let'GâuGâu hình như chưa chính xác.
    Code của bạn @thanh_tks chạy đúng rùi đó.
    không biết cái "mã phôi thép" (cột A) có phải là mã duy nhất không......hihhihi........hen xui.............

  8. #8
    phatthu Guest
    các bạn file chạy rất ok nhưng vẫn không xóa được những dòng giống nhau. và hình như dữ liệu cộng vào chưa chính xác các bạn xem lại dùm mình với.
    ví dụ như ở cột 0, khi minh tính file của minh là được số 338. nhưng file chạy ra tới hơn 2000

  9. #9
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    mình đưa file minh làm xong roi len các ban kiểm tra lai dùm
    tại mình sum dữ liệu của cột 0 của 12 sheet thì là 338, còn file tổng ra hơn 2000

  10. #10
    dangvanthao Guest
    Trích dẫn Gửi bởi chuotchuix
    mình đưa file minh làm xong roi len các ban kiểm tra lai dùm
    tại mình sum dữ liệu của cột 0 của 12 sheet thì là 338, còn file tổng ra hơn 2000
    Mình chưa kiểm tra hết code nhưng cách lấy biến MÃ của bạn để làm key của dictionary không đúng.
    ma = data(j, 2) & data(j, 3) & data(j, 4) & data(j, 5)
    Nếu data(j,2)="", data(j,3)="a" hay data(j,2)="a", data(j,3)="" đều ra mã giống nhau. Bạn có thể dùng 1 ký tự đặc biệt gì đó mà chắc chắn không xuất hiện trong các cột B-E để nối các cột. Ví dụ:
    ma=data(j,2) & "@" & data(j,3) & "@" & data(j,4) & "@" & data(j,5)

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •