Câu hỏi chưa rõ ràng.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 ạ.
Dạ vẫn lấy hết bác ạ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?
Công thức mà lấy hết các sheet, lọc duy nhất thì hơi chuối.Dạ vẫn lấy hết bác ạ
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 sheetCông thức mà lấy hết các sheet, lọc duy nhất thì hơi chuối.
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.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
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 sheetTó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.
Chẳng hiểu gì cả.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
Sao số thứ tự 30 và 31 trùng mà vẫn không loại ra nhỉ? Thầy @Ba Tê kiểm tra xem.Chẳng hiểu gì cả.
Tôi chỉ làm được như vầy thôi, bạn xem file rồi tự chỉnh.
Thân gởi anh leonguyenzSao số thứ tự 30 và 31 trùng mà vẫn không loại ra nhỉ? Thầy @Ba Tê kiểm tra xem.
Bạn kiểm tra kỹ file nhé.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
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