netvietcomputer
Thành viên mới

- Tham gia
- 5/7/09
- Bài viết
- 42
- Được thích
- 1
Như thế này cho đơn giản hơn @gtri này: Mình gộp 2 bảng thành 1 sau đó tìm điều kiện nếu Type và color giống nhau thì cộng quant lại. Giúp mình nhé! thank's
Public Sub Tong_Hop()
Dim DL1, DL2, Tam, kq(), r As Long, i, j
With Sheet2
DL1 = .Range("A3", .Range("C65000").End(xlUp))
DL2 = .Range("E3", .Range("G65000").End(xlUp))
ReDim kq(1 To UBound(DL1) + UBound(DL2), 1 To 3)
End With
With CreateObject("Scripting.Dictionary")
For r = 1 To UBound(DL1) + UBound(DL2)
If r <= UBound(DL1) Then
Tam = DL1(r, 1) & "#" & DL1(r, 2): i = DL1(r, 3): j = Array(1, i)
Else
Tam = DL2(r - UBound(DL1), 1) & "#" & DL2(r - UBound(DL1), 2): i = DL2(r - UBound(DL1), 3): j = Array(1, i)
End If
If Not .exists(Tam) Then
.Add Tam, j
Else
j = .Item(Tam)
j(0) = j(0) + 1: j(1) = j(1) + i
.Item(Tam) = j
End If
Next r
Tam = .keys
i = 0
For r = 0 To UBound(Tam)
If .Item(Tam(r))(0) > 1 Then
i = i + 1
kq(i, 1) = Split(Tam(r), "#")(0)
kq(i, 2) = Split(Tam(r), "#")(1)
kq(i, 3) = .Item(Tam(r))(1)
End If
Next r
End With
Sheet3.Range("A1").Resize(i, 3).Value = kq
End Sub
THank's bác.Cái này dùng VBA cho tiện.
Chạy đoạn code này, kết quả dán vào sheet3
Mã:Public Sub Tong_Hop() Dim DL1, DL2, Tam, kq(), r As Long, i, j With Sheet2 DL1 = .Range("A3", .Range("C65000").End(xlUp)) DL2 = .Range("E3", .Range("G65000").End(xlUp)) ReDim kq(1 To UBound(DL1) + UBound(DL2), 1 To 3) End With With CreateObject("Scripting.Dictionary") For r = 1 To UBound(DL1) + UBound(DL2) If r <= UBound(DL1) Then Tam = DL1(r, 1) & "#" & DL1(r, 2): i = DL1(r, 3): j = Array(1, i) Else Tam = DL2(r - UBound(DL1), 1) & "#" & DL2(r - UBound(DL1), 2): i = DL2(r - UBound(DL1), 3): j = Array(1, i) End If If Not .exists(Tam) Then .Add Tam, j Else j = .Item(Tam) j(0) = j(0) + 1: j(1) = j(1) + i .Item(Tam) = j End If Next r Tam = .keys i = 0 For r = 0 To UBound(Tam) If .Item(Tam(r))(0) > 1 Then i = i + 1 kq(i, 1) = Split(Tam(r), "#")(0) kq(i, 2) = Split(Tam(r), "#")(1) kq(i, 3) = .Item(Tam(r))(1) End If Next r End With Sheet3.Range("A1").Resize(i, 3).Value = kq End Sub
THank's bác.
Nhưng em gà lắm, chưa biết chạy VBA.
Bác có link hướng dẫn chạy nó ko?
Rồi bác lại dọn sẵn cơm cho ăn rồi!Mở file, nhấn nút "TÌM"
Về VBA có lẽ bạn chủ động tìm hiểu đi vậy, trên diễn đàn rất nhiều bài tương tự.
Hình như nếu type 1 và type 2 thì VBA không tính thì phải
Dạ đây ạ. Chênh lệch giữa tổng quant1+quant2 và phần tổng hợp ở sheet3Không hiểu rõ lắm, bạn đánh dấu vào file kiểm tra rồi đính kèm cho cụ thể
Hướng dẫn cụ thể hơn được không pro! Thank'sCái này Remove duplicates rồi dùng sumif cho nhanh nếu k biết VBA
Dạ đây ạ. Chênh lệch giữa tổng quant1+quant2 và phần tổng hợp ở sheet3
Ok rồi! do em diễn đạt chưa đầy đủ. Thank's bác đã nhiệt tìnhCái này là do bạn diễn đạt trong sheet02 chưa rõ ràng
"Nếu Type1 và color1 ở bảng 1 giống Type2 và color2 ở bảng 2 thì điền vào Type"
Chỉ viết có vậy thì hiểu rằng nếu không giống nhau thì không điền--->sẽ không có quant tương ứng
---
Chạy thử file đính kèm, vẫn code cũ, thay đổi điều kiện truy xuất.
---
Bài này dùng PivotTable mới là chuẩn nhất
Ok rồi! do em diễn đạt chưa đầy đủ. Thank's bác đã nhiệt tình![]()
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), I As Long, J As Long, Tem As String, K As Long, R As Long
Set Dic = CreateObject("Scripting.Dictionary")
R = [A65536].End(xlUp).Row
If [E65536].End(xlUp).Row > R Then R = [E65536].End(xlUp).Row
sArr = Range("A3:G3").Resize(R).Value
ReDim dArr(1 To UBound(sArr, 1) * 2, 1 To 3)
For J = 1 To 5 Step 4
For I = 1 To UBound(sArr, 1)
If sArr(I, J) <> Empty Then
Tem = sArr(I, J) & "#" & sArr(I, J + 1)
If Not Dic.exists(Tem) Then
K = K + 1
Dic.Item(Tem) = K
dArr(K, 1) = sArr(I, J)
dArr(K, 2) = sArr(I, J + 1)
dArr(K, 3) = sArr(I, J + 2)
Else
dArr(Dic.Item(Tem), 3) = dArr(Dic.Item(Tem), 3) + sArr(I, J + 2)
End If
End If
Next I
Next J
[I3:K1000].ClearContents
[I3].Resize(K, 3) = dArr
Set Dic = Nothing
End Sub
Thank's pro! các bác support đến tận chân răng thế này chắc em dốt mãi thoaiNếu vậy thì tham gia thêm 1 Sub:
PHP:Public Sub GPE() Dim Dic As Object, sArr(), dArr(), I As Long, J As Long, Tem As String, K As Long, R As Long Set Dic = CreateObject("Scripting.Dictionary") R = [A65536].End(xlUp).Row If [E65536].End(xlUp).Row > R Then R = [E65536].End(xlUp).Row sArr = Range("A3:G3").Resize(R).Value ReDim dArr(1 To UBound(sArr, 1) * 2, 1 To 3) For J = 1 To 5 Step 4 For I = 1 To UBound(sArr, 1) If sArr(I, J) <> Empty Then Tem = sArr(I, J) & "#" & sArr(I, J + 1) If Not Dic.exists(Tem) Then K = K + 1 Dic.Item(Tem) = K dArr(K, 1) = sArr(I, J) dArr(K, 2) = sArr(I, J + 1) dArr(K, 3) = sArr(I, J + 2) Else dArr(Dic.Item(Tem), 3) = dArr(Dic.Item(Tem), 3) + sArr(I, J + 2) End If End If Next I Next J [I3:K1000].ClearContents [I3].Resize(K, 3) = dArr Set Dic = Nothing End Sub
Thank's pro! các bác support đến tận chân răng thế này chắc em dốt mãi thoai![]()