nguyentaiphat
Thành viên mới

- Tham gia
- 6/10/21
- Bài viết
- 3
- Được thích
- 0
Cảm ơn ad nhiều nhé !!! <3Bỏ mấy cái Merge bên sheet1 đi rồi Pivot thôi.
bạn thử file. Kết quả trả về đang để ở F14: ... để bạn để bạn dễ đối chiếuTình hình là e muốn tổng hợp tất cả mặt hàng từ nhiều đơn hàng vào 1 bảng để kiểm soát xuất hàng.
Mẫu trong file đính kèm ạ, (em muốn chuyển từ sheet 1 ---> sheet 2).
Mong các cao nhân giúp e !!!
Sub TONGHOP()
Dim Arr(), KQ(), TieuDe()
Dim I&, J&, k&, t&, R&, Lr&
Dim DK, DK2, Dic As Object
With Sheet1
Lr = .Cells(Rows.Count, 2).End(xlUp).Row
Arr = .Range("A2:C" & Lr).Value
R = UBound(Arr)
ReDim TieuDe(1 To 1, 1 To Lr)
Set Dic = CreateObject("Scripting.Dictionary")
For I = 1 To Lr - 1
If Arr(I, 2) <> "" Then DK2 = Trim(Arr(I, 2))
If Not Dic.Exists(DK2) Then
k = k + 1
Dic.Add (DK2), k
TieuDe(1, k) = DK2
End If
Next I
ReDim KQ(1 To R, 1 To k + 1)
For I = 1 To R
If Arr(I, 1) <> "" Then DK = Arr(I, 1)
If Not Dic.Exists(DK) Then
t = t + 1
Dic.Add (DK), t
KQ(t, 1) = DK
End If
Next I
Dim Rng As Range
Set Rng = .Range("A1:A" & Lr)
On Error Resume Next
For J = 1 To UBound(KQ)
dong = Rng.Find(KQ(J, 1)).Row
If KQ(J + 1, 1) <> "" Then
dongcuoi = Rng.Find(KQ(J + 1, 1)).Row - 1
Else
dongcuoi = Lr
End If
For Z = dong To dongcuoi
keys = Arr(Z - 1, 2)
If Dic.Exists(keys) Then
KQ(J, Dic.Item(keys) + 1) = Arr(Z - 1, 3)
End If
Next Z
Next J
End With
Sheet2.[F15].Resize(t, k + 1) = KQ
Sheet2.[G14].Resize(1, k) = TieuDe
MsgBox "Xong"
End Sub
cảm ơn ad nhé ! nhưng mình không biết cách sử dụng code trong excel nên cũng không biết sử dụng thế nào luôn.bạn thử file. Kết quả trả về đang để ở F14: ... để bạn để bạn dễ đối chiếu
riêng dòng tổng cộng bạn tự làm nhé. nếu đúng sai xin cho phản hồi.
Mã:Sub TONGHOP() Dim Arr(), KQ(), TieuDe() Dim I&, J&, k&, t&, R&, Lr& Dim DK, DK2, Dic As Object With Sheet1 Lr = .Cells(Rows.Count, 2).End(xlUp).Row Arr = .Range("A2:C" & Lr).Value R = UBound(Arr) ReDim TieuDe(1 To 1, 1 To Lr) Set Dic = CreateObject("Scripting.Dictionary") For I = 1 To Lr - 1 If Arr(I, 2) <> "" Then DK2 = Trim(Arr(I, 2)) If Not Dic.Exists(DK2) Then k = k + 1 Dic.Add (DK2), k TieuDe(1, k) = DK2 End If Next I ReDim KQ(1 To R, 1 To k + 1) For I = 1 To R If Arr(I, 1) <> "" Then DK = Arr(I, 1) If Not Dic.Exists(DK) Then t = t + 1 Dic.Add (DK), t KQ(t, 1) = DK End If Next I Dim Rng As Range Set Rng = .Range("A1:A" & Lr) On Error Resume Next For J = 1 To UBound(KQ) dong = Rng.Find(KQ(J, 1)).Row If KQ(J + 1, 1) <> "" Then dongcuoi = Rng.Find(KQ(J + 1, 1)).Row - 1 Else dongcuoi = Lr End If For Z = dong To dongcuoi keys = Arr(Z - 1, 2) If Dic.Exists(keys) Then KQ(J, Dic.Item(keys) + 1) = Arr(Z - 1, 3) End If Next Z Next J End With Sheet2.[F15].Resize(t, k + 1) = KQ Sheet2.[G14].Resize(1, k) = TieuDe MsgBox "Xong" End Sub
Ad đâu mà ad. Bạn đó là super mod đócảm ơn ad nhé ! nhưng mình không biết cách sử dụng code trong excel nên cũng không biết sử dụng thế nào luôn.(
Trong file đính kèm mình gửi bạn, Bạn có trông thấy cái nút màu xanh ở chỗ ô D7,E7 không? nhấn vào đó và xem kết quả (lưu ý trước khi nhấn hãy xóa bỏ vùng từ F14 đến R22 ).cảm ơn ad nhé ! nhưng mình không biết cách sử dụng code trong excel nên cũng không biết sử dụng thế nào luôn.(