Tổng hợp nhiều sheet vào 1 sheet (1 người xem)

Liên hệ QC

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

Thư Tín

Thành viên chính thức
Tham gia
3/5/19
Bài viết
77
Được thích
4
Em muốn lấy dữ liệu của các cột B,C,D,E từ các sheet vào sheet TH với điều kiện nếu dữ liệu ở cột E trùng thì lấy 1. Cột F sẽ cộng tổng giá trị của cột F ở các sheet. Cột G hiển thị tên sheet đã lấy dữ liệu. Nhờ mọi người giúp em, em cảm ơn nhiều ạ.
 

File đính kèm

Em muốn lấy dữ liệu của các cột B,C,D,E từ các sheet vào sheet TH với điều kiện nếu dữ liệu ở cột E trùng thì lấy 1. Cột F sẽ cộng tổng giá trị của cột F ở các sheet. Cột G hiển thị tên sheet đã lấy dữ liệu. Nhờ mọi người giúp em, em cảm ơn nhiều ạ.
Câu hỏi chưa rõ ràng.
Cột E trùng, nhưng tên sheet hoặc các cột B,C,D khác nhau thì lấy cái nào?
 
Dùng vba cũng được anh, em muốn lấy dữ liệu ở cột B,C,D,E của các sheet sang sheet TH còn cột F thì cọng tổng cột F của các sheet
Tóm lại, bạn muốn chỉ khi trùng cả cột B,C,D,E và tên sheet thì mới cộng tổng cột F.
Nếu không trùng hết các điều kiện trên thì mỗi dòng lấy sang "TH" thành 1 dòng?
---> Có 1 sheet("Sheet1") nằm đâu đó mà bạn không nói là bỏ qua không xét.
 
Tóm lại, bạn muốn chỉ khi trùng cả cột B,C,D,E và tên sheet thì mới cộng tổng cột F.
Nếu không trùng hết các điều kiện trên thì mỗi dòng lấy sang "TH" thành 1 dòng?
---> Có 1 sheet("Sheet1") nằm đâu đó mà bạn không nói là bỏ qua không xét.
Dạ ý em là lấy hết dữ liệu của các côt BCDE của các sheet đưa sang sheet TH, còn cột F thì cộng tổng cột F của các sheet
 

File đính kèm

Lần chỉnh sửa cuối:

File đính kèm

Thân gởi anh leonguyenz
Em muốn lấy thêm cột G nhờ anh chỉnh lại code giúp em cảm ơn nhiều
Bạn kiểm tra kỹ file nhé.
Mã:
Sub GPE_LocDL()
Dim wS As Worksheet, LwS As Long, sArr(), i As Long
Dim k As Long, Dic As Object, Tmp As String, dArr(1 To 1000, 1 To 10)
Set Dic = CreateObject("Scripting.Dictionary")
Sheet1.Range("A4:K1003").ClearContents
For Each wS In ThisWorkbook.Worksheets
    If wS.Name <> "TH" Then
        LwS = wS.Range("B65535").End(xlUp).Row
        If LwS > 3 Then
            sArr = wS.Range("B4:G" & LwS).Value
            For i = 1 To UBound(sArr, 1)
                If Not Dic.Exists((sArr(i, 1) & "|" & wS.Name)) Then
                    k = k + 1: Dic.Add (sArr(i, 1) & "|" & wS.Name), k
                    dArr(k, 1) = k: dArr(k, 2) = sArr(i, 1)
                    dArr(k, 3) = sArr(i, 2): dArr(k, 4) = sArr(i, 3)
                    dArr(k, 5) = sArr(i, 4): dArr(k, 6) = sArr(i, 5)
                    dArr(k, 7) = sArr(i, 6): dArr(k, 10) = DateValue(Replace(wS.Name, "ngay ", ""))
                Else
                    Tmp = Dic.Item((sArr(i, 1) & "|" & wS.Name))
                    dArr(Tmp, 6) = dArr(Tmp, 6) + sArr(i, 5)
                    dArr(Tmp, 7) = dArr(Tmp, 7) + sArr(i, 6)
                End If
            Next i
        End If
    End If
Next
If k Then Sheet1.Range("A4:J1003") = dArr
Set Dic = Nothing
End Sub
(Giựt mối thầy @Ba Tê rồi, ẹc ẹc ... )
 

File đính kèm

Web KT

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

Back
Top Bottom